#!/bin/bash
# ensure-no-errors.sh
# Pre-commit verification - blocks commits if errors exist

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

cd "$PROJECT_ROOT"

echo "🔒 Pre-commit verification..."
echo ""

BLOCKED=0

# ─────────────────────────────────────────────────────────────
# TypeScript Check
# ─────────────────────────────────────────────────────────────

echo "📋 TypeScript check..."
TSC_OUTPUT=$(npm run typecheck 2>&1) || true

if echo "$TSC_OUTPUT" | grep -q "error TS"; then
    ERROR_COUNT=$(echo "$TSC_OUTPUT" | grep -c "error TS" || echo "0")
    echo -e "${RED}❌ Found $ERROR_COUNT TypeScript error(s)${NC}"
    echo "$TSC_OUTPUT" | grep "error TS" | head -10
    BLOCKED=1
else
    echo -e "${GREEN}✓ TypeScript: OK${NC}"
fi

# ─────────────────────────────────────────────────────────────
# ESLint Check
# ─────────────────────────────────────────────────────────────

echo ""
echo "📋 ESLint check..."
LINT_OUTPUT=$(npm run lint 2>&1) || true

if echo "$LINT_OUTPUT" | grep -qE "[0-9]+ error|[0-9]+ warning"; then
    echo -e "${RED}❌ ESLint issues found${NC}"
    echo "$LINT_OUTPUT" | tail -5
    BLOCKED=1
else
    echo -e "${GREEN}✓ ESLint: OK${NC}"
fi

# ─────────────────────────────────────────────────────────────
# TODO/FIXME Check
# ─────────────────────────────────────────────────────────────

echo ""
echo "📋 Checking for TODO/FIXME..."
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM 2>/dev/null | grep -E "\.(ts|tsx|js|jsx)$" || true)

if [ -n "$STAGED_FILES" ]; then
    TODO_FOUND=$(echo "$STAGED_FILES" | xargs grep -l "TODO\|FIXME\|XXX\|HACK" 2>/dev/null || true)
    if [ -n "$TODO_FOUND" ]; then
        echo -e "${RED}❌ Found TODO/FIXME in:${NC}"
        echo "$TODO_FOUND"
        BLOCKED=1
    else
        echo -e "${GREEN}✓ No TODO/FIXME${NC}"
    fi
else
    echo -e "${GREEN}✓ No TODO/FIXME${NC}"
fi

# ─────────────────────────────────────────────────────────────
# Console.log Check
# ─────────────────────────────────────────────────────────────

echo ""
echo "📋 Checking for console.log..."

if [ -n "$STAGED_FILES" ]; then
    CONSOLE_FOUND=$(echo "$STAGED_FILES" | xargs grep -l "console\.\(log\|debug\|info\)" 2>/dev/null || true)
    if [ -n "$CONSOLE_FOUND" ]; then
        echo -e "${RED}❌ Found console.log in:${NC}"
        echo "$CONSOLE_FOUND"
        BLOCKED=1
    else
        echo -e "${GREEN}✓ No console.log${NC}"
    fi
else
    echo -e "${GREEN}✓ No console.log${NC}"
fi

# ─────────────────────────────────────────────────────────────
# Result
# ─────────────────────────────────────────────────────────────

echo ""

if [ $BLOCKED -eq 1 ]; then
    echo -e "${RED}╔══════════════════════════════════════════════════════════════╗${NC}"
    echo -e "${RED}║                    COMMIT BLOCKED                             ║${NC}"
    echo -e "${RED}╠══════════════════════════════════════════════════════════════╣${NC}"
    echo -e "${RED}║  Fix the issues above before committing.                      ║${NC}"
    echo -e "${RED}║                                                               ║${NC}"
    echo -e "${RED}║  Commands:                                                    ║${NC}"
    echo -e "${RED}║    npm run typecheck    - Check TypeScript errors             ║${NC}"
    echo -e "${RED}║    npm run lint:fix     - Auto-fix ESLint issues              ║${NC}"
    echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}"
    exit 1
fi

echo -e "${GREEN}✅ All pre-commit checks passed${NC}"
exit 0
