#!/bin/bash
# =============================================================
# setup-server.sh
# Certificate Engine — Setup via SSH no cPanel
# Execute UMA VEZ no servidor:  bash setup-server.sh
# =============================================================

set -e

VERDE='\033[0;32m'
AMARELO='\033[1;33m'
VERMELHO='\033[0;31m'
NC='\033[0m'

ok()   { echo -e "${VERDE}  ✓ $1${NC}"; }
info() { echo -e "${AMARELO}  → $1${NC}"; }
erro() { echo -e "${VERMELHO}  ✗ $1${NC}"; }

echo ""
echo "============================================"
echo "  Certificate Engine — Setup do Servidor"
echo "============================================"
echo ""

# ─── 1. Detecta o sistema operacional ─────────────────────────
info "Detectando sistema operacional..."

if   [ -f /etc/almalinux-release ] || [ -f /etc/centos-release ] || [ -f /etc/redhat-release ]; then
  OS="rhel"
  ok "AlmaLinux / CentOS / RHEL detectado"
elif [ -f /etc/debian_version ] || [ -f /etc/ubuntu_version ]; then
  OS="debian"
  ok "Debian / Ubuntu detectado"
else
  OS="unknown"
  info "Sistema não reconhecido — tentará instalação genérica"
fi

# ─── 2. Instala Chromium ───────────────────────────────────────
info "Verificando Chromium..."

CHROME_BIN=""
for candidato in /usr/bin/chromium-browser /usr/bin/chromium /usr/bin/google-chrome-stable /usr/bin/google-chrome; do
  if [ -f "$candidato" ]; then
    CHROME_BIN="$candidato"
    break
  fi
done

if [ -n "$CHROME_BIN" ]; then
  ok "Chromium já instalado em: $CHROME_BIN"
else
  info "Chromium não encontrado. Instalando..."

  if [ "$OS" = "rhel" ]; then
    if command -v dnf &>/dev/null; then
      dnf install -y chromium 2>/dev/null || yum install -y chromium 2>/dev/null
    else
      yum install -y chromium 2>/dev/null
    fi
  elif [ "$OS" = "debian" ]; then
    apt-get update -qq && apt-get install -y chromium-browser 2>/dev/null || \
    apt-get install -y chromium 2>/dev/null
  fi

  # Verifica novamente
  for candidato in /usr/bin/chromium-browser /usr/bin/chromium /usr/bin/google-chrome-stable; do
    if [ -f "$candidato" ]; then
      CHROME_BIN="$candidato"
      break
    fi
  done

  if [ -n "$CHROME_BIN" ]; then
    ok "Chromium instalado em: $CHROME_BIN"
  else
    erro "Não foi possível instalar Chromium automaticamente."
    echo ""
    echo "  Instale manualmente via SSH e adicione ao .env:"
    echo "  CHROME_PATH=/caminho/para/chromium"
    echo ""
  fi
fi

# ─── 3. Verifica versão do Chromium ───────────────────────────
if [ -n "$CHROME_BIN" ]; then
  CHROME_VER=$("$CHROME_BIN" --version 2>/dev/null || echo "não obtida")
  ok "Versão: $CHROME_VER"
fi

# ─── 4. Instala dependências do sistema para Chromium ─────────
info "Verificando dependências do sistema para Chromium..."

if [ "$OS" = "rhel" ]; then
  yum install -y \
    nss atk at-spi2-atk cups-libs libdrm libxkbcommon \
    libXcomposite libXdamage libXfixes libXrandr \
    pango cairo alsa-lib 2>/dev/null || true

elif [ "$OS" = "debian" ]; then
  apt-get install -y \
    libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
    libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
    libpango-1.0-0 libcairo2 libasound2 2>/dev/null || true
fi

ok "Dependências verificadas"

# ─── 5. Atualiza o .env com CHROME_PATH ───────────────────────
if [ -f ".env" ] && [ -n "$CHROME_BIN" ]; then
  if grep -q "^CHROME_PATH=" .env; then
    sed -i "s|^CHROME_PATH=.*|CHROME_PATH=$CHROME_BIN|" .env
  else
    echo "" >> .env
    echo "CHROME_PATH=$CHROME_BIN" >> .env
  fi
  ok "CHROME_PATH atualizado no .env: $CHROME_BIN"
elif [ -n "$CHROME_BIN" ]; then
  info "Arquivo .env não encontrado. Adicione manualmente:"
  echo "  CHROME_PATH=$CHROME_BIN"
fi

# ─── 6. Verifica Node.js ──────────────────────────────────────
info "Verificando Node.js..."
NODE_VER=$(node --version 2>/dev/null || echo "não instalado")
echo "  Node.js: $NODE_VER"

# ─── 7. Cria diretórios necessários ───────────────────────────
info "Criando diretórios de uploads e PDFs..."
mkdir -p uploads/pdfs uploads/frentes uploads/versos uploads/assinaturas logs
chmod 755 uploads uploads/pdfs uploads/frentes uploads/versos uploads/assinaturas logs
ok "Diretórios criados"

# ─── 8. Instala dependências Node ─────────────────────────────
info "Instalando dependências Node.js (sem Chromium embutido)..."

# Garante que puppeteer não vai baixar Chromium
export PUPPETEER_SKIP_DOWNLOAD=true
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true

npm install --omit=dev 2>&1 | tail -5

ok "npm install concluído"

# ─── 9. Teste rápido do Chromium via Node ─────────────────────
if [ -n "$CHROME_BIN" ]; then
  info "Testando Chromium via puppeteer-core..."

  node -e "
const p = require('puppeteer-core');
(async () => {
  const b = await p.launch({
    executablePath: '$CHROME_BIN',
    headless: 'new',
    args: ['--no-sandbox','--disable-setuid-sandbox','--single-process','--no-zygote']
  });
  const pg = await b.newPage();
  await pg.setContent('<h1>OK</h1>');
  await b.close();
  console.log('Puppeteer-core + Chromium: OK');
})().catch(e => { console.error('ERRO:', e.message); process.exit(1); });
" && ok "Puppeteer-core funcionando!" || erro "Puppeteer-core com erro — verifique CHROME_PATH"
fi

# ─── Resumo ───────────────────────────────────────────────────
echo ""
echo "============================================"
echo "  Setup concluído"
echo "============================================"
echo ""
[ -n "$CHROME_BIN" ] && echo -e "${VERDE}  Chrome: $CHROME_BIN${NC}" || echo -e "${VERMELHO}  Chrome: não instalado (configure CHROME_PATH no .env)${NC}"
echo ""
echo "  Próximos passos:"
echo "  1. Configure o .env  (cp .env.example .env)"
echo "  2. Crie as tabelas:   node src/db/migrate.js"
echo "  3. Inicie:            npm start"
echo ""
