#!/usr/bin/env bash

set -euo pipefail

APP_DIR="${APP_DIR:-/var/www/html/minas-summit/minas-summit-2027}"
SERVICE="${SERVICE:-minas-summit}"
BRANCH="${BRANCH:-main}"
PORT="${PORT:-3007}"
HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:${PORT}/}"

echo "========================================"
echo "       Deploy Minas Summit 2027"
echo "========================================"

echo "==> Usuário"
whoami

if [ "$(whoami)" != "deploy" ]; then
    echo "ERRO: o deploy deve ser executado com o usuário deploy."
    exit 1
fi

echo "==> Diretório"
cd "$APP_DIR"
pwd

echo "==> Atualizando código"

git fetch origin "$BRANCH"

LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse "origin/$BRANCH")

echo "Commit local : $LOCAL"
echo "Commit remoto: $REMOTE"

echo "==> Checkout da branch $BRANCH"
git checkout "$BRANCH"

echo "==> Sincronizando código"
git reset --hard "origin/$BRANCH"

echo "==> Limpando arquivos não rastreados"
git clean -fd

echo "==> Verificando package-lock.json"

if [ ! -f package-lock.json ]; then
    echo "ERRO: package-lock.json não encontrado."
    echo "O package-lock.json precisa estar versionado no Git."
    exit 1
fi

echo "==> Instalando dependências"
npm ci

echo "==> Build EC2"
npm run build

echo "==> Validando build"

if [ ! -f ".output/server/index.mjs" ]; then
    echo "ERRO: .output/server/index.mjs não foi gerado."
    exit 1
fi

if [ ! -d ".output/public" ]; then
    echo "ERRO: .output/public não foi gerado."
    exit 1
fi

if [ ! -d ".output/public/assets" ]; then
    echo "ERRO: .output/public/assets não foi gerado."
    exit 1
fi

CSS_COUNT=$(find .output/public/assets -type f -name "*.css" | wc -l)
JS_COUNT=$(find .output/public/assets -type f -name "*.js" | wc -l)

echo "CSS encontrados: $CSS_COUNT"
echo "JS encontrados : $JS_COUNT"

if [ "$CSS_COUNT" -eq 0 ]; then
    echo "ERRO: nenhum CSS encontrado no build."
    exit 1
fi

if [ "$JS_COUNT" -eq 0 ]; then
    echo "ERRO: nenhum JS encontrado no build."
    exit 1
fi

echo "==> Build validado"

echo "==> Reiniciando $SERVICE"
sudo -n systemctl restart "$SERVICE"

echo "==> Health check"

for i in $(seq 1 30); do
    if curl -fsS -o /dev/null "$HEALTH_URL"; then
        echo "OK — aplicação respondendo em $HEALTH_URL"
        break
    fi

    if [ "$i" -eq 30 ]; then
        echo "ERRO: aplicação não respondeu."

        sudo -n systemctl status "$SERVICE" --no-pager -l || true

        echo "===== JOURNAL ====="
        sudo -n journalctl -u "$SERVICE" -n 100 --no-pager || true

        exit 1
    fi

    sleep 2
done

echo "==> Verificando serviço"

if ! sudo -n systemctl is-active --quiet "$SERVICE"; then
    echo "ERRO: serviço $SERVICE não está ativo."
    sudo -n systemctl status "$SERVICE" --no-pager -l || true
    exit 1
fi

echo
echo "========================================"
echo "    Deploy concluído com sucesso"
echo "========================================"