#!/usr/bin/env bash
# =============================================================================
# build-prod.sh — Roleta UMR
# Rode na raiz do projeto, no servidor:
#   cd /var/www/gameeventos/roleta-umr
#   bash build-prod.sh
# =============================================================================

set -e

# Caminho absoluto da pasta onde o script está
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE_PATH="/roleta-umr/"
API_PORT=8080
PM2_NAME="roleta-api"
SESSION_SECRET="${SESSION_SECRET:-$(node -e "process.stdout.write(require('crypto').randomBytes(32).toString('hex'))")}"

# ── Cores ─────────────────────────────────────────────────────────────────────
GREEN='\033[0;32m'; BLUE='\033[0;34m'; YELLOW='\033[1;33m'; NC='\033[0m'
ok()   { echo -e "${GREEN}  ✓ $1${NC}"; }
step() { echo -e "\n${BLUE}▶ $1${NC}"; }
warn() { echo -e "${YELLOW}  ⚠ $1${NC}"; }

echo ""
echo "╔══════════════════════════════════════════════════╗"
echo "║         Build de Produção — Roleta UMR           ║"
echo "╚══════════════════════════════════════════════════╝"
echo "  Diretório: ${PROJECT_DIR}"

# ── 1. Node.js ────────────────────────────────────────────────────────────────
step "Verificando Node.js..."
if ! command -v node &>/dev/null; then
  warn "Node.js não encontrado. Instalando v20..."
  curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
  sudo apt install -y nodejs
fi
ok "Node.js $(node -v)"

# ── 2. pnpm ───────────────────────────────────────────────────────────────────
step "Verificando pnpm..."
if ! command -v pnpm &>/dev/null; then
  warn "pnpm não encontrado. Instalando..."
  npm install -g pnpm
fi
ok "pnpm $(pnpm -v)"

# ── 3. PM2 ────────────────────────────────────────────────────────────────────
step "Verificando PM2..."
if ! command -v pm2 &>/dev/null; then
  warn "PM2 não encontrado. Instalando..."
  npm install -g pm2
fi
ok "PM2 $(pm2 -v)"

# ── 4. Dependências ───────────────────────────────────────────────────────────
step "Instalando dependências do projeto..."
cd "${PROJECT_DIR}"
pnpm install --frozen-lockfile
ok "Dependências instaladas"

# ── 5. Build frontend ─────────────────────────────────────────────────────────
step "Build do frontend (base: ${BASE_PATH})..."
PORT=3000 BASE_PATH="${BASE_PATH}" \
  pnpm --filter @workspace/roleta-umr run build
ok "Frontend em: ${PROJECT_DIR}/artifacts/roleta-umr/dist/public/"

# ── 6. Build API ──────────────────────────────────────────────────────────────
step "Build do servidor API..."
pnpm --filter @workspace/api-server run build
ok "API em: ${PROJECT_DIR}/artifacts/api-server/dist/"

# ── 7. Permissões ─────────────────────────────────────────────────────────────
step "Ajustando permissões..."
sudo chown -R www-data:www-data "${PROJECT_DIR}"
sudo chmod -R 755 "${PROJECT_DIR}"
sudo chmod 664 "${PROJECT_DIR}/artifacts/api-server/data/state.json" \
               "${PROJECT_DIR}/artifacts/api-server/data/participants.csv" 2>/dev/null || true
ok "Permissões ajustadas"

# ── 8. Apache — módulos necessários ──────────────────────────────────────────
step "Habilitando módulos Apache..."
sudo a2enmod proxy proxy_http rewrite 2>/dev/null || true
sudo systemctl reload apache2
ok "Apache recarregado"

# ── 9. PM2 — iniciar ou reiniciar API ────────────────────────────────────────
step "Iniciando servidor API via PM2..."
if pm2 describe "${PM2_NAME}" &>/dev/null; then
  pm2 restart "${PM2_NAME}"
  ok "PM2 '${PM2_NAME}' reiniciado"
else
  SESSION_SECRET="${SESSION_SECRET}" \
  DATA_DIR="${PROJECT_DIR}/artifacts/api-server/data" \
  PORT="${API_PORT}" \
    pm2 start "${PROJECT_DIR}/artifacts/api-server/dist/index.mjs" \
      --name "${PM2_NAME}"
  pm2 save
  ok "PM2 '${PM2_NAME}' iniciado"
fi

# ── Conclusão ─────────────────────────────────────────────────────────────────
echo ""
echo "╔══════════════════════════════════════════════════╗"
echo "║               Deploy concluído! ✓                ║"
echo "╠══════════════════════════════════════════════════╣"
echo "║  URL: http://gameeventos.com.br/roleta-umr/      ║"
echo "╠══════════════════════════════════════════════════╣"
echo "║  Comandos úteis:                                 ║"
echo "║    pm2 logs roleta-api     # logs em tempo real  ║"
echo "║    pm2 restart roleta-api  # após novo deploy    ║"
echo "╚══════════════════════════════════════════════════╝"
echo ""
