#!/bin/bash

# 🚀 Script para Deploy Automático no Servidor via SSH
# Execute: ./deploy-to-server.sh usuario@servidor

echo "🚀 Deploy Automático - Liberi Kids"
echo "=================================="

# Verificar se foi fornecido o servidor
if [ -z "$1" ]; then
    echo "❌ Uso: ./deploy-to-server.sh usuario@servidor"
    echo "   Exemplo: ./deploy-to-server.sh root@192.168.1.100"
    exit 1
fi

SERVER=$1
PROJECT_DIR="app_estoque"

echo "🔗 Conectando ao servidor: $SERVER"

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

log() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Função para executar comando no servidor
run_remote() {
    ssh $SERVER "$1"
}

# Função para copiar arquivos
copy_files() {
    log "📁 Copiando arquivos para o servidor..."
    rsync -avz --progress --exclude 'node_modules' --exclude '.git' --exclude 'client/node_modules' ./ $SERVER:~/$PROJECT_DIR/
    if [ $? -eq 0 ]; then
        log "✅ Arquivos copiados com sucesso!"
    else
        error "❌ Erro ao copiar arquivos"
        exit 1
    fi
}

# Função para configurar ambiente no servidor
setup_environment() {
    log "🔧 Configurando ambiente no servidor..."
    
    run_remote "
        cd $PROJECT_DIR
        
        # Verificar se Node.js está instalado
        if ! command -v node &> /dev/null; then
            echo '📦 Instalando Node.js...'
            curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
            sudo apt-get install -y nodejs
        fi
        
        # Verificar versão do Node.js
        NODE_VERSION=\$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
        if [ \"\$NODE_VERSION\" -lt 18 ]; then
            echo '❌ Node.js versão 18+ é necessária'
            exit 1
        fi
        
        echo '✅ Node.js \$(node -v) encontrado'
        
        # Criar arquivo .env se não existir
        if [ ! -f '.env' ]; then
            echo '📝 Criando arquivo .env...'
            cp .env.example .env
            echo '⚠️  IMPORTANTE: Configure o arquivo .env com suas credenciais!'
            echo '   Edite: nano .env'
        fi
        
        # Tornar script executável
        chmod +x scripts/deploy-local.sh
        
        echo '✅ Ambiente configurado!'
    "
}

# Função para fazer deploy
deploy_application() {
    log "🚀 Fazendo deploy da aplicação..."
    
    run_remote "
        cd $PROJECT_DIR
        
        # Executar script de deploy
        ./scripts/deploy-local.sh
    "
}

# Função para verificar status
check_status() {
    log "📊 Verificando status da aplicação..."
    
    run_remote "
        pm2 status
        echo ''
        echo '🌐 Aplicação disponível em:'
        echo '  Local: http://localhost:5000'
        echo '  Rede: http://\$(hostname -I | awk '{print \$1}'):5000'
    "
}

# Executar deploy completo
main() {
    echo ""
    log "Iniciando deploy completo..."
    echo ""
    
    # Passo 1: Copiar arquivos
    copy_files
    echo ""
    
    # Passo 2: Configurar ambiente
    setup_environment
    echo ""
    
    # Passo 3: Fazer deploy
    deploy_application
    echo ""
    
    # Passo 4: Verificar status
    check_status
    echo ""
    
    log "🎉 Deploy concluído com sucesso!"
    echo ""
    warn "📝 PRÓXIMOS PASSOS:"
    echo "1. Configure o arquivo .env no servidor:"
    echo "   ssh $SERVER 'cd $PROJECT_DIR && nano .env'"
    echo ""
    echo "2. Reinicie a aplicação após configurar:"
    echo "   ssh $SERVER 'pm2 restart liberi-kids'"
    echo ""
    echo "3. Acesse a aplicação no navegador"
}

# Executar função principal
main
