#!/bin/bash

# Rebuild de producción tras haber hecho git pull a mano con chat-englishworldcenter.
# Ejecutar como root desde la raíz del proyecto.
# Uso: 1) Como chat-englishworldcenter: git pull origin main
#      2) Como root: ./rebuild-prod-with-root.sh

set -e

echo "🔨 Rebuild AI Learning Platform (post pull)..."

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

POSTGRES_CONTAINER="ai-learning-platform-ewc-postgres"
TEMPORAL_CONTAINER="ai-learning-platform-ewc-temporal"
BACKEND_CONTAINER="ai-learning-platform-ewc-backend"
FRONTEND_PROD_CONTAINER="ai-learning-platform-ewc-frontend-prod"

if [ "$(id -u)" -ne 0 ]; then
    echo -e "${YELLOW}⚠️  Este script está pensado para ejecutarse como root.${NC}"
    read -p "¿Continuar de todos modos? (yes/no): " -r
    [[ ! $REPLY =~ ^[Yy][Ee][Ss]$ ]] && exit 1
fi

if [ ! -f "docker-compose.yml" ]; then
    echo -e "${RED}❌ Ejecuta este script desde la raíz del proyecto.${NC}"
    exit 1
fi

if ! command -v docker &> /dev/null || ! command -v docker-compose &> /dev/null; then
    echo -e "${RED}❌ Docker y Docker Compose son necesarios.${NC}"
    exit 1
fi

echo ""
echo -e "${BLUE}📊 Restaurando .env desde backups...${NC}"
if [ -f "backups/env" ]; then
    cp backups/env ./.env
    echo -e "${GREEN}✅ .env restaurado${NC}"
else
    echo -e "${YELLOW}⚠️  No existe backups/env, se mantiene .env actual${NC}"
fi
if [ -f "backups/envBackend" ]; then
    cp backups/envBackend backend/.env
    echo -e "${GREEN}✅ backend/.env restaurado${NC}"
fi
if [ -f "backups/envFrontend" ]; then
    cp backups/envFrontend frontend/.env
    echo -e "${GREEN}✅ frontend/.env restaurado${NC}"
fi
echo ""

echo -e "${YELLOW}🛑 Deteniendo backend y frontend (PostgreSQL se mantiene)...${NC}"
docker-compose stop backend frontend-prod temporal 2>/dev/null || true
echo -e "${GREEN}✅ Contenedores detenidos${NC}"
echo ""

echo -e "${YELLOW}🔨 Reconstruyendo backend y frontend (sin caché)...${NC}"
docker-compose --profile prod build --no-cache backend frontend-prod
echo -e "${GREEN}✅ Build completado${NC}"
echo ""

echo -e "${YELLOW}🚀 Iniciando contenedores...${NC}"
if ! docker ps --format '{{.Names}}' | grep -q "^${POSTGRES_CONTAINER}$"; then
    echo -e "${BLUE}   Iniciando PostgreSQL y Temporal...${NC}"
    docker-compose up -d postgres temporal
    sleep 10
fi
docker-compose --profile prod up -d backend frontend-prod
echo -e "${GREEN}✅ Contenedores iniciados${NC}"
echo ""

echo -e "${YELLOW}⏳ Esperando arranque de servicios...${NC}"
sleep 15
echo ""

echo -e "${YELLOW}🔒 Verificando vulnerabilidades (npm audit)...${NC}"
if command -v npm &> /dev/null; then
    [ -f "package.json" ] && ( npm audit --audit-level=moderate > /dev/null 2>&1 || npm audit fix ) || true
    [ -f "backend/package.json" ] && ( cd backend && npm audit --audit-level=moderate > /dev/null 2>&1 || npm audit fix; cd .. ) || true
    [ -f "frontend/package.json" ] && ( cd frontend && npm audit --audit-level=moderate > /dev/null 2>&1 || npm audit fix; cd .. ) || true
fi
echo -e "${GREEN}✅ Verificación de seguridad hecha${NC}"
echo ""

echo -e "${BLUE}⏳ Esperando PostgreSQL...${NC}"
until docker exec "$POSTGRES_CONTAINER" pg_isready -U postgres > /dev/null 2>&1; do
    echo -e "${BLUE}   Esperando...${NC}"
    sleep 2
done
echo -e "${GREEN}✅ PostgreSQL listo${NC}"
sleep 10
echo ""

echo -e "${YELLOW}🔄 Base de datos: migraciones...${NC}"
if [ ! -f "scripts/migrate-database.sh" ]; then
    echo -e "${YELLOW}⚠️  scripts/migrate-database.sh no encontrado, omitiendo migraciones${NC}"
else
    if ./scripts/migrate-database.sh; then
        echo -e "${GREEN}✅ Migraciones aplicadas${NC}"
    else
        echo -e "${RED}❌ Fallo en migraciones. Revisar: docker logs ${BACKEND_CONTAINER}${NC}"
        exit 1
    fi
fi
echo ""

echo -e "${YELLOW}♻️  Reiniciando backend...${NC}"
docker-compose --profile prod restart backend
sleep 5
echo ""

echo -e "${YELLOW}✅ Estado de servicios:${NC}"
docker-compose ps
if ! docker-compose ps | grep -q "Up"; then
    echo -e "${RED}❌ Algún servicio no está en marcha. Revisar: docker-compose logs -f${NC}"
    exit 1
fi
echo ""

echo -e "${YELLOW}🏥 Health checks...${NC}"
for i in {1..10}; do
    if curl -sf http://localhost:3000/health > /dev/null 2>&1; then
        echo -e "${GREEN}✅ Backend respondiendo${NC}"
        break
    fi
    [ $i -lt 10 ] && echo -e "${YELLOW}   Intento $i/10...${NC}" && sleep 5
done
curl -sf http://localhost:8080 > /dev/null 2>&1 && echo -e "${GREEN}✅ Frontend respondiendo${NC}" || echo -e "${YELLOW}⚠️  Frontend en 8080 no respondió (puede ser normal si usas proxy)${NC}"
echo ""

echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}🎉 Rebuild completado con éxito${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Logs: docker-compose logs -f${NC}"
echo ""
