#!/bin/bash
# ═══════════════════════════════════════════════════════════════════════════
# Environment Validation Script for E2E Tests
# ═══════════════════════════════════════════════════════════════════════════
#
# This script validates that all required components are ready for E2E tests.
#

set -e

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

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

source "$PROJECT_ROOT/scripts/runtime-env.sh"
nexus_export_runtime_env "$PROJECT_ROOT"

echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  E2E Test Environment Validation${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
echo ""

ERRORS=0

# Check Node.js
echo -n "Checking Node.js... "
if command -v node &> /dev/null; then
    NODE_VERSION=$(node --version)
    echo -e "${GREEN}✓${NC} $NODE_VERSION"
else
    echo -e "${RED}✗${NC} Node.js not found"
    ERRORS=$((ERRORS + 1))
fi

# Check npm
echo -n "Checking npm... "
if command -v npm &> /dev/null; then
    NPM_VERSION=$(npm --version)
    echo -e "${GREEN}✓${NC} $NPM_VERSION"
else
    echo -e "${RED}✗${NC} npm not found"
    ERRORS=$((ERRORS + 1))
fi

# Check Go
echo -n "Checking Go... "
if command -v go &> /dev/null; then
    GO_VERSION=$(go version)
    echo -e "${GREEN}✓${NC} $GO_VERSION"
else
    echo -e "${RED}✗${NC} Go not found"
    ERRORS=$((ERRORS + 1))
fi

# Check Docker (optional - for local TiDB)
echo -n "Checking Docker... "
if command -v docker &> /dev/null; then
    DOCKER_VERSION=$(docker --version)
    echo -e "${GREEN}✓${NC} $DOCKER_VERSION"

    # Check if TiDB container is running
    echo -n "Checking TiDB container... "
    if docker ps | grep -q tidb-test; then
        echo -e "${GREEN}✓${NC} Running"
    else
        echo -e "${YELLOW}!${NC} Not running (start with: docker run -d --name tidb-test -p 4000:4000 pingcap/tidb:latest)"
    fi
else
    echo -e "${YELLOW}!${NC} Not available (using TiDB Cloud or manual setup)"
fi

# Check MySQL client (for database operations)
echo -n "Checking MySQL client... "
if command -v mysql &> /dev/null; then
    echo -e "${GREEN}✓${NC} Available"
else
    echo -e "${YELLOW}!${NC} Not found (needed for database reset)"
fi

# Check node_modules
echo -n "Checking node_modules... "
if [ -d "$PROJECT_ROOT/node_modules" ]; then
    echo -e "${GREEN}✓${NC} Installed"
else
    echo -e "${RED}✗${NC} Not found (run: npm install)"
    ERRORS=$((ERRORS + 1))
fi

# Check Playwright
echo -n "Checking Playwright... "
if [ -d "$PROJECT_ROOT/node_modules/@playwright" ]; then
    echo -e "${GREEN}✓${NC} Installed"
else
    echo -e "${YELLOW}!${NC} Not found (run: npm install @playwright/test)"
fi

# Check Playwright browsers
echo -n "Checking Playwright browsers... "
if [ -d "$HOME/.cache/ms-playwright" ] || [ -d "/root/.cache/ms-playwright" ]; then
    echo -e "${GREEN}✓${NC} Installed"
else
    echo -e "${YELLOW}!${NC} Not found (run: npx playwright install)"
fi

# Check environment file
echo -n "Checking runtime env files... "
if [ -f "$PROJECT_ROOT/.env" ] || [ -f "$PROJECT_ROOT/.env.test" ]; then
    echo -e "${GREEN}✓${NC} runtime env file found"
else
    echo -e "${YELLOW}!${NC} Not found (copy .env.example to .env.test)"
fi

# Check database connectivity (if mysql available and env configured)
echo -n "Checking database connectivity... "
if command -v mysql &> /dev/null; then
    TIDB_HOST=${TIDB_HOST:-"localhost"}
    TIDB_PORT=${TIDB_PORT:-"4000"}
    TIDB_USER=${TIDB_USER:-"root"}

    if mysql -h "$TIDB_HOST" -P "$TIDB_PORT" -u "$TIDB_USER" ${TIDB_PASSWORD:+-p"$TIDB_PASSWORD"} -e "SELECT 1;" &> /dev/null; then
        echo -e "${GREEN}✓${NC} Connected to $TIDB_HOST:$TIDB_PORT"
    else
        echo -e "${RED}✗${NC} Cannot connect to $TIDB_HOST:$TIDB_PORT"
        ERRORS=$((ERRORS + 1))
    fi
else
    echo -e "${YELLOW}!${NC} Skipped (mysql client not available)"
fi

echo -n "Resolved frontend/backend URLs... "
echo -e "${GREEN}✓${NC} FRONTEND_URL=$FRONTEND_URL API_BASE_URL=$API_BASE_URL"

echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"

if [ $ERRORS -eq 0 ]; then
    echo -e "${GREEN}✓ All critical checks passed! Environment is ready for E2E tests.${NC}"
    exit 0
else
    echo -e "${RED}✗ $ERRORS critical check(s) failed. Please fix the issues above.${NC}"
    exit 1
fi
