#!/bin/bash

# Script de Inicialização Rápida
# Sistema de Predição de Glosas

echo "🤖 Iniciando Sistema de Predição de Glosas..."
echo ""

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

# Função para verificar se Docker está rodando
check_docker() {
    if ! docker ps &> /dev/null; then
        echo -e "${RED}❌ Docker não está rodando!${NC}"
        echo ""
        echo "Por favor:"
        echo "1. Abra o Docker Desktop"
        echo "2. Aguarde a inicialização completa"
        echo "3. Execute este script novamente"
        echo ""
        exit 1
    fi
    echo -e "${GREEN}✅ Docker está rodando${NC}"
}

# Função para parar serviços anteriores
stop_services() {
    echo ""
    echo "🛑 Parando serviços anteriores..."
    docker compose down 2>/dev/null

    # Mata processos PHP locais se existirem
    pkill -f "php -S localhost:8000" 2>/dev/null

    echo -e "${GREEN}✅ Serviços anteriores parados${NC}"
}

# Função para iniciar Docker Compose
start_docker() {
    echo ""
    echo "🚀 Iniciando containers Docker..."

    if docker compose up --build -d; then
        echo -e "${GREEN}✅ Containers iniciados com sucesso${NC}"
    else
        echo -e "${RED}❌ Erro ao iniciar containers${NC}"
        echo ""
        echo "Verifique os logs com:"
        echo "  docker compose logs"
        exit 1
    fi
}

# Função para aguardar inicialização
wait_for_services() {
    echo ""
    echo "⏳ Aguardando inicialização dos serviços..."

    local max_attempts=30
    local attempt=0

    while [ $attempt -lt $max_attempts ]; do
        if curl -s http://localhost:8010/health > /dev/null 2>&1; then
            echo -e "${GREEN}✅ API está respondendo${NC}"
            break
        fi

        echo -n "."
        sleep 1
        attempt=$((attempt + 1))
    done

    if [ $attempt -eq $max_attempts ]; then
        echo -e "${YELLOW}⚠️  API demorou para responder, mas containers estão rodando${NC}"
    fi

    echo ""
}

# Função para verificar status
check_status() {
    echo ""
    echo "📊 Status dos serviços:"
    echo ""

    # Verifica containers
    if docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep "predicao-glosas" > /dev/null; then
        echo -e "${GREEN}✅ Container API (predicao-glosas):${NC}"
        docker ps --format "  {{.Status}}\t{{.Ports}}" | grep "predicao-glosas" | grep -v "web"

        echo -e "${GREEN}✅ Container Web (predicao-glosas-web):${NC}"
        docker ps --format "  {{.Status}}\t{{.Ports}}" | grep "predicao-glosas-web"
    else
        echo -e "${RED}❌ Containers não encontrados${NC}"
        exit 1
    fi

    echo ""

    # Testa API
    if curl -s http://localhost:8010/health > /dev/null 2>&1; then
        echo -e "${GREEN}✅ API REST respondendo em http://localhost:8010${NC}"

        # Mostra quantos modelos estão carregados
        modelos=$(curl -s http://localhost:8010/health | grep -o '"modelos_carregados":[0-9]*' | grep -o '[0-9]*')
        if [ ! -z "$modelos" ]; then
            echo "   📦 Modelos carregados: $modelos"
        fi
    else
        echo -e "${YELLOW}⚠️  API não está respondendo ainda${NC}"
    fi

    # Testa Web
    if curl -s http://localhost:8011/ > /dev/null 2>&1; then
        echo -e "${GREEN}✅ Interface Web respondendo em http://localhost:8011${NC}"
    else
        echo -e "${YELLOW}⚠️  Interface Web não está respondendo ainda${NC}"
    fi
}

# Função para mostrar URLs
show_urls() {
    echo ""
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo ""
    echo "🎉 Sistema Iniciado com Sucesso!"
    echo ""
    echo "📱 Acesse:"
    echo ""
    echo -e "   ${GREEN}Interface Web (Gestão de Modelos):${NC}"
    echo "   👉 http://localhost:8011"
    echo ""
    echo -e "   ${GREEN}API REST (Predições):${NC}"
    echo "   👉 http://localhost:8010"
    echo "   👉 http://localhost:8010/health"
    echo "   👉 http://localhost:8010/modelos"
    echo ""
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo ""
    echo "💡 Comandos úteis:"
    echo ""
    echo "   Ver logs:        docker compose logs -f"
    echo "   Parar:           docker compose down"
    echo "   Reiniciar:       docker compose restart"
    echo ""
}

# Função para abrir no navegador (opcional)
open_browser() {
    echo "🌐 Deseja abrir a interface web no navegador? (s/n)"
    read -r response

    if [[ "$response" =~ ^[Ss]$ ]]; then
        if command -v open &> /dev/null; then
            open http://localhost:8011
            echo -e "${GREEN}✅ Navegador aberto${NC}"
        elif command -v xdg-open &> /dev/null; then
            xdg-open http://localhost:8011
            echo -e "${GREEN}✅ Navegador aberto${NC}"
        else
            echo -e "${YELLOW}⚠️  Não foi possível abrir automaticamente${NC}"
            echo "Acesse manualmente: http://localhost:8011"
        fi
    fi
}

# Execução principal
main() {
    clear
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo "  Sistema de Predição de Glosas - ML"
    echo "  Inicialização Automática"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

    check_docker
    stop_services
    start_docker
    wait_for_services
    check_status
    show_urls
    open_browser

    echo ""
    echo -e "${GREEN}✨ Tudo pronto! Bom trabalho!${NC}"
    echo ""
}

# Executa
main
