#!/bin/bash

# ===========================================
# 🚀 Setup Automático - Projeto GEMINI
# ===========================================

echo "🎯 Iniciando setup do projeto GEMINI..."
echo ""

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

# Função para verificar se comando existe
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Função para printar status
print_status() {
    if [ $1 -eq 0 ]; then
        echo -e "${GREEN}✅ $2${NC}"
    else
        echo -e "${RED}❌ $2${NC}"
        exit 1
    fi
}

# Função para printar warning
print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

# Função para printar info
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

# ===========================================
# 🔍 Verificar Pré-requisitos
# ===========================================
echo "🔍 Verificando pré-requisitos..."

# Verificar PHP
if command_exists php; then
    PHP_VERSION=$(php -v | head -n 1 | cut -d ' ' -f 2 | cut -d '-' -f 1)
    print_status 0 "PHP $PHP_VERSION encontrado"
else
    print_status 1 "PHP não encontrado. Instale PHP 8.2+"
fi

# Verificar Composer
if command_exists composer; then
    COMPOSER_VERSION=$(composer --version | cut -d ' ' -f 3)
    print_status 0 "Composer $COMPOSER_VERSION encontrado"
else
    print_status 1 "Composer não encontrado. Instale Composer"
fi

# Verificar Node.js
if command_exists node; then
    NODE_VERSION=$(node --version)
    print_status 0 "Node.js $NODE_VERSION encontrado"
else
    print_status 1 "Node.js não encontrado. Instale Node.js 18+"
fi

# Verificar npm
if command_exists npm; then
    NPM_VERSION=$(npm --version)
    print_status 0 "NPM $NPM_VERSION encontrado"
else
    print_status 1 "NPM não encontrado"
fi

# Verificar MySQL/MariaDB
if command_exists mysql; then
    MYSQL_VERSION=$(mysql --version)
    print_status 0 "MySQL/MariaDB encontrado: $MYSQL_VERSION"
else
    print_warning "MySQL não encontrado ou não está no PATH"
    echo "   Certifique-se de que MySQL está instalado e rodando"
fi

echo ""
echo "✅ Pré-requisitos verificados!"
echo ""

# ===========================================
# 📁 Verificar Estrutura do Projeto
# ===========================================
echo "📁 Verificando estrutura do projeto..."

if [ ! -d "backend" ]; then
    print_status 1 "Diretório 'backend' não encontrado"
fi

if [ ! -d "frontend" ]; then
    print_status 1 "Diretório 'frontend' não encontrado"
fi

if [ ! -f "backend/.env.example" ]; then
    print_status 1 "Arquivo 'backend/.env.example' não encontrado"
fi

print_status 0 "Estrutura do projeto OK"
echo ""

# ===========================================
# ⚙️ Configurar Backend
# ===========================================
echo "⚙️ Configurando backend..."

cd backend

# Verificar se .env já existe
if [ ! -f ".env" ]; then
    print_info "Copiando .env.example para .env"
    cp .env.example .env
    print_status 0 "Arquivo .env criado"
else
    print_warning "Arquivo .env já existe"
fi

# Instalar dependências Composer
print_info "Instalando dependências do backend..."
composer install --no-interaction
print_status $? "Dependências do backend instaladas"

# Gerar key
print_info "Gerando application key..."
php artisan key:generate --no-interaction
print_status $? "Application key gerada"

echo ""
print_info "🔧 Por favor, edite o arquivo backend/.env com suas configurações:"
echo "   - DB_DATABASE (nome do banco)"
echo "   - DB_USERNAME (usuário do banco)"
echo "   - DB_PASSWORD (senha do banco)"
echo "   - MERCADOPAGO_KEY (opcional)"
echo "   - MERCADOPAGO_SECRET (opcional)"
echo ""

# Pausar para usuário editar .env
read -p "Pressione ENTER quando terminar de editar o .env..."

echo ""

# ===========================================
# 🗄️ Configurar Banco de Dados
# ===========================================
echo "🗄️ Configurando banco de dados..."

print_info "Executando migrações..."
php artisan migrate --no-interaction
print_status $? "Migrações executadas"

print_info "Executando seeders..."
php artisan db:seed --no-interaction
print_status $? "Seeders executados"

echo ""

# ===========================================
# 🎨 Configurar Frontend
# ===========================================
echo "🎨 Configurando frontend..."

cd ../frontend

# Instalar dependências npm
print_info "Instalando dependências do frontend..."
npm install --silent
print_status $? "Dependências do frontend instaladas"

echo ""

# ===========================================
# 🚀 Iniciar Servidores
# ===========================================
echo "🚀 Iniciando servidores..."

# Voltar para diretório raiz
cd ..

echo ""
print_info "Para iniciar os servidores, abra DOIS terminais:"

echo ""
echo "🔷 Terminal 1 (Backend):"
echo "   cd backend && php artisan serve --host=0.0.0.0 --port=8000"

echo ""
echo "🎨 Terminal 2 (Frontend):"
echo "   cd frontend && npm run dev"

echo ""
echo ""
echo -e "${GREEN}🎉 Setup concluído com sucesso!${NC}"
echo ""

# ===========================================
# 📝 Resumo
# ===========================================
echo "📝 Resumo:"
echo "   - Backend configurado em: http://localhost:8000"
echo "   - Frontend configurado em: http://localhost:5173"
echo "   - API disponível em: http://localhost:8000/api/v1"
echo ""

echo "👤 Usuários padrão:"
echo "   Admin: admin@gemini.com / password"
echo "   User:  user@gemini.com / password"
echo ""

echo -e "${BLUE}📖 Para mais informações, leia README.md e SETUP.md${NC}"
echo ""
echo -e "${YELLOW}⚠️  Não se esqueça de configurar suas chaves de API no .env!${NC}"
echo ""

# ===========================================
# 🧪 Teste Rápido (opcional)
# ===========================================
read -p "Deseja testar se o backend está rodando? (s/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Ss]$ ]]; then
    echo ""
    print_info "Testando backend..."
    
    # Tentar fazer login
    RESPONSE=$(curl -s -X POST http://localhost:8000/api/v1/auth/login \
        -H "Content-Type: application/json" \
        -d '{"email":"admin@gemini.com","password":"password"}' \
        2>/dev/null)
    
    if [[ $RESPONSE == *"token"* ]]; then
        print_status 0 "Backend está funcionando! Login testado com sucesso."
    else
        print_warning "Backend pode não estar rodando ou .env precisa ser configurado."
        echo "   Inicie o backend com: cd backend && php artisan serve"
    fi
fi

echo ""
echo -e "${GREEN}✨ Setup finalizado! Bom desenvolvimento! ✨${NC}"
