#!/bin/bash

# 🚀 Script de Deploy Automático - Liberi Kids
# Deploy no servidor local com PM2

set -e  # Parar em caso de erro

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

echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}🚀 Deploy Automático - Liberi Kids${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""

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

# 1. Verificar Node.js
echo -e "${YELLOW}📦 Verificando Node.js...${NC}"
if ! command_exists node; then
    echo -e "${RED}❌ Node.js não encontrado!${NC}"
    echo -e "Instale com: ${BLUE}curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && sudo apt-get install -y nodejs${NC}"
    exit 1
fi
echo -e "${GREEN}✅ Node.js $(node --version) encontrado${NC}"
echo ""

# 2. Verificar PM2
echo -e "${YELLOW}📦 Verificando PM2...${NC}"
if ! command_exists pm2; then
    echo -e "${YELLOW}⚠️  PM2 não encontrado. Instalando...${NC}"
    sudo npm install -g pm2
    echo -e "${GREEN}✅ PM2 instalado com sucesso${NC}"
else
    echo -e "${GREEN}✅ PM2 $(pm2 --version) encontrado${NC}"
fi
echo ""

# 3. Verificar arquivo .env
echo -e "${YELLOW}🔧 Verificando configurações...${NC}"
if [ ! -f ".env" ]; then
    echo -e "${RED}❌ Arquivo .env não encontrado!${NC}"
    if [ -f ".env.example" ]; then
        echo -e "${YELLOW}Criando .env a partir do .env.example...${NC}"
        cp .env.example .env
        echo -e "${YELLOW}⚠️  ATENÇÃO: Configure o arquivo .env com suas credenciais!${NC}"
        echo -e "Execute: ${BLUE}nano .env${NC}"
        exit 1
    else
        echo -e "${RED}Nem .env nem .env.example encontrados!${NC}"
        exit 1
    fi
else
    echo -e "${GREEN}✅ Arquivo .env encontrado${NC}"
fi
echo ""

# 4. Instalar dependências do backend
echo -e "${YELLOW}📦 Instalando dependências do backend...${NC}"
npm install
echo -e "${GREEN}✅ Dependências do backend instaladas${NC}"
echo ""

# 5. Instalar dependências do frontend
echo -e "${YELLOW}📦 Instalando dependências do frontend...${NC}"
cd client
npm install
echo -e "${GREEN}✅ Dependências do frontend instaladas${NC}"
echo ""

# 6. Build do frontend
echo -e "${YELLOW}🔨 Fazendo build do frontend...${NC}"
npm run build
cd ..
echo -e "${GREEN}✅ Build do frontend concluído${NC}"
echo ""

# 7. Criar diretório de logs
echo -e "${YELLOW}📁 Criando diretórios necessários...${NC}"
mkdir -p logs
mkdir -p uploads
echo -e "${GREEN}✅ Diretórios criados${NC}"
echo ""

# 8. Parar processo anterior (se existir)
echo -e "${YELLOW}🛑 Parando processos anteriores...${NC}"
if pm2 list | grep -q "liberi-kids-estoque"; then
    pm2 stop liberi-kids-estoque
    pm2 delete liberi-kids-estoque
    echo -e "${GREEN}✅ Processo anterior removido${NC}"
else
    echo -e "${BLUE}ℹ️  Nenhum processo anterior encontrado${NC}"
fi
echo ""

# 9. Iniciar com PM2
echo -e "${YELLOW}🚀 Iniciando aplicação com PM2...${NC}"
pm2 start ecosystem.config.js
echo -e "${GREEN}✅ Aplicação iniciada${NC}"
echo ""

# 10. Salvar configuração PM2
echo -e "${YELLOW}💾 Salvando configuração do PM2...${NC}"
pm2 save
echo -e "${GREEN}✅ Configuração salva${NC}"
echo ""

# 11. Verificar status
echo -e "${YELLOW}📊 Verificando status...${NC}"
pm2 status
echo ""

# 12. Configurar auto-start (opcional)
echo -e "${YELLOW}🔄 Deseja configurar inicialização automática no boot? (s/n)${NC}"
read -r resposta
if [ "$resposta" = "s" ] || [ "$resposta" = "S" ]; then
    echo -e "${YELLOW}Configurando auto-start...${NC}"
    pm2 startup
    echo ""
    echo -e "${YELLOW}⚠️  IMPORTANTE: Execute o comando mostrado acima com sudo!${NC}"
    echo -e "Depois execute: ${BLUE}pm2 save${NC}"
fi
echo ""

# 13. Verificar porta
PORT=$(grep "^PORT=" .env | cut -d '=' -f2 || echo "5000")
PORT=${PORT:-5000}

echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}✅ Deploy concluído com sucesso!${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo -e "${GREEN}📍 Aplicação rodando em:${NC}"
echo -e "   ${BLUE}http://localhost:${PORT}${NC}"
echo -e "   ${BLUE}http://$(hostname -I | awk '{print $1}'):${PORT}${NC}"
echo ""
echo -e "${GREEN}📦 Catálogo público em:${NC}"
echo -e "   ${BLUE}http://localhost:${PORT}/catalogo${NC}"
echo ""
echo -e "${YELLOW}📊 Comandos úteis:${NC}"
echo -e "   ${BLUE}pm2 status${NC}              - Ver status"
echo -e "   ${BLUE}pm2 logs${NC}                - Ver logs"
echo -e "   ${BLUE}pm2 monit${NC}               - Monitorar"
echo -e "   ${BLUE}pm2 restart all${NC}         - Reiniciar"
echo -e "   ${BLUE}pm2 stop all${NC}            - Parar"
echo ""
echo -e "${GREEN}📝 Ver logs agora:${NC}"
echo -e "   ${BLUE}pm2 logs liberi-kids-estoque${NC}"
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
