#!/bin/bash

# Script de monitoreo para el despliegue de Francia Ocupada
# Uso: ./monitor-deploy.sh

echo "🔍 Monitor de Despliegue - Francia Ocupada"
echo "=========================================="
echo ""

# Colores para output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Función para verificar estado de contenedores
check_containers() {
    echo -e "${YELLOW}📦 Estado de Contenedores:${NC}"
    docker compose -f docker-compose_prod.yml ps
    echo ""
}

# Función para verificar logs
check_logs() {
    echo -e "${YELLOW}📋 Logs Recientes (últimas 20 líneas):${NC}"
    echo ""
    echo "--- CLIENT ---"
    docker compose -f docker-compose_prod.yml logs --tail=20 client 2>/dev/null || echo "Cliente no disponible"
    echo ""
    echo "--- SERVER ---"
    docker compose -f docker-compose_prod.yml logs --tail=20 server 2>/dev/null || echo "Servidor no disponible"
    echo ""
}

# Función para verificar conectividad
check_connectivity() {
    echo -e "${YELLOW}🌐 Verificación de Conectividad:${NC}"
    
    # Verificar puerto 3000 (cliente)
    if nc -z localhost 3000 2>/dev/null; then
        echo -e "${GREEN}✅ Puerto 3000 (Cliente): ABIERTO${NC}"
    else
        echo -e "${RED}❌ Puerto 3000 (Cliente): CERRADO${NC}"
    fi
    
    # Verificar puerto 4000 (servidor)
    if nc -z localhost 4000 2>/dev/null; then
        echo -e "${GREEN}✅ Puerto 4000 (Servidor): ABIERTO${NC}"
    else
        echo -e "${RED}❌ Puerto 4000 (Servidor): CERRADO${NC}"
    fi
    
    # Verificar puerto 5432 (base de datos)
    if nc -z localhost 5432 2>/dev/null; then
        echo -e "${GREEN}✅ Puerto 5432 (Base de Datos): ABIERTO${NC}"
    else
        echo -e "${RED}❌ Puerto 5432 (Base de Datos): CERRADO${NC}"
    fi
    
    echo ""
}

# Función para verificar uso de recursos
check_resources() {
    echo -e "${YELLOW}💻 Uso de Recursos:${NC}"
    docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" \
        $(docker compose -f docker-compose_prod.yml ps -q 2>/dev/null) 2>/dev/null || echo "No hay contenedores corriendo"
    echo ""
}

# Menú principal
while true; do
    echo ""
    echo "Selecciona una opción:"
    echo "1) Ver estado de contenedores"
    echo "2) Ver logs recientes"
    echo "3) Verificar conectividad"
    echo "4) Ver uso de recursos"
    echo "5) Monitoreo completo"
    echo "6) Logs en tiempo real (Ctrl+C para salir)"
    echo "7) Reiniciar servicios"
    echo "8) Detener servicios"
    echo "9) Salir"
    echo ""
    read -p "Opción: " option
    
    case $option in
        1)
            check_containers
            ;;
        2)
            check_logs
            ;;
        3)
            check_connectivity
            ;;
        4)
            check_resources
            ;;
        5)
            check_containers
            check_connectivity
            check_resources
            check_logs
            ;;
        6)
            echo "📡 Logs en tiempo real (Ctrl+C para detener)..."
            docker compose -f docker-compose_prod.yml logs -f
            ;;
        7)
            echo "🔄 Reiniciando servicios..."
            docker compose -f docker-compose_prod.yml restart
            echo -e "${GREEN}✅ Servicios reiniciados${NC}"
            ;;
        8)
            read -p "¿Estás seguro de que quieres detener los servicios? (s/n): " confirm
            if [ "$confirm" = "s" ]; then
                echo "🛑 Deteniendo servicios..."
                docker compose -f docker-compose_prod.yml down
                echo -e "${GREEN}✅ Servicios detenidos${NC}"
            fi
            ;;
        9)
            echo "👋 ¡Hasta luego!"
            exit 0
            ;;
        *)
            echo -e "${RED}❌ Opción inválida${NC}"
            ;;
    esac
done
