#!/usr/bin/env bash
# =============================================================================
# Instala Node.js + Playwright/Chromium no SERVIDOR (Debian/Ubuntu)
# para capturar o gráfico "Perfil de Desempenho" usado no relatório ARS (DOCX).
#
# O que este script faz:
#   1. Instala Node.js 18 (nodesource);
#   2. Instala as dependências do Playwright (Chromium) no diretório do app;
#   3. Garante a entrada /etc/hosts p/ o Chromium acessar a própria aplicação
#      (127.0.0.1 -> eletrobras.localhost), pois a captura roda no mesmo host;
#   4. Roda um teste de captura (contexto 666 / aplicação 4) se quiser.
#
# Executar como ROOT no servidor (ou com sudo):
#   bash instalar-playwright.sh
#
# No container de dev (php74_apache) também funciona:
#   docker exec -it php74_apache bash -c "cd /var/www/html/eletrobras/charts/perfil-desempenho && bash instalar-playwright.sh"
# =============================================================================
set -euo pipefail

# Caminho do app (ajuste se o deploy for outro)
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
CHART_DIR="$APP_DIR/charts/perfil-desempenho"

echo "==> Diretório do app: $APP_DIR"
echo "==> Diretório do chart : $CHART_DIR"

if [ "$(id -u)" -ne 0 ]; then
  echo "AVISO: rode como root/sudo para instalar pacotes de sistema." >&2
fi

echo "==> (1/4) Instalando Node.js 18 via nodesource..."
if ! command -v node >/dev/null 2>&1 || [ "$(node -e 'console.log(process.versions.node.split(".")[0])')" -lt 16 ]; then
  export DEBIAN_FRONTEND=noninteractive
  apt-get update -y
  apt-get install -y curl ca-certificates gnupg
  curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
  apt-get install -y nodejs
fi
echo "    node: $(node -v)"

echo "==> (2/4) Instalando dependências do Playwright..."
cd "$CHART_DIR"
npm install --no-audit --no-fund

# Browsers em diretório compartilhado e legível pelo usuário web (www-data/daemon),
# porque o Apache roda a geração do ARS com esse usuário (não com root).
# O helper do PHP (arsCapturarPerfilPlaywright) define PLAYWRIGHT_BROWSERS_PATH=/ms-playwright.
export PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

echo "==> (3/4) Baixando Chromium + dependências de sistema (em /ms-playwright)..."
mkdir -p /ms-playwright
npx playwright install --with-deps chromium
chmod -R a+rX /ms-playwright || true

echo "==> (4/4) Garantindo /etc/hosts para captura no próprio servidor..."
if ! grep -q "eletrobras.localhost" /etc/hosts 2>/dev/null; then
  echo "127.0.0.1 eletrobras.localhost eletrobras.local" >> /etc/hosts
fi
grep "eletrobras.localhost" /etc/hosts || true

echo ""
echo "Pronto! Playwright instalado:"
node -e "console.log('   playwright', require('playwright/package.json').version)"

echo ""
echo "Teste rápido (contexto 666 / aplicação 4):"
TOKEN=$(php -r "echo md5('gledson' . date('dmY'));")
node capture.js \
  --url "http://eletrobras.localhost/site/grafico-perfil-desempenho-token?token=${TOKEN}&contexto_id=666&aplicacao_id=4" \
  --out /tmp/perfil_666.png \
  --width 1280 --height 720 --dsf 2 --wait 4500
echo "PNG gerado: /tmp/perfil_666.png ($(stat -c%s /tmp/perfil_666.png 2>/dev/null || echo '?') bytes)"
echo ""
echo "Se o Apache roda como www-data, confira se www-data consegue ler /ms-playwright:"
echo "   sudo -u www-data node -e \"require('playwright'); console.log('ok')\"   # dentro de $CHART_DIR"
echo ""
echo "O relatório ARS passa a usar este gráfico (última coleta); sem Playwright o DOCX mostra 'Erro ao gerar a imagem'."
