#!/usr/bin/env bash
# ============================================================
# Copyright (c) 2026 RAVAPI Soluções. www.ravapi.com
# Roda tudo — banco, núcleo e integração — em bancos limpos
#   uso: ./db/tests/run.sh
# ============================================================
set -euo pipefail
export PATH=${PGBIN:-/usr/lib/postgresql/16/bin}:$PATH
RAIZ="$(cd "$(dirname "$0")/../.." && pwd)"

preparar() {
  local db=$1
  psql -q -c "DROP DATABASE IF EXISTS $db;" -c "CREATE DATABASE $db;" >/dev/null
  for f in "$RAIZ"/db/migrations/*.sql; do
    psql -q -d "$db" -v ON_ERROR_STOP=1 -f "$f"
  done
  psql -q -d "$db" -c "GRANT CONNECT ON DATABASE $db TO recibos_app;" >/dev/null
  psql -q -d "$db" -v ON_ERROR_STOP=1 -f "$RAIZ/db/tests/00_seed.sql"
}

echo "► camada de banco"
preparar recibos_test
psql -d recibos_test -f "$RAIZ/db/tests/01_criterios_de_aceite.sql"
psql -d recibos_test -f "$RAIZ/db/tests/02_defesa_em_profundidade.sql"
bash "$RAIZ/db/tests/03_concorrencia.sh" recibos_test "${N:-40}"

echo ""
echo "► núcleo e layout (extenso, hash, template A4)"
cd "$RAIZ"
node --experimental-transform-types --test src/core/__tests__/nucleo.test.ts src/render/__tests__/template.test.ts 2>/dev/null \
  | grep -E '^(not ok|# (tests|pass|fail))'

echo ""
echo "► integração (fases 1 a 4 contra o banco)"
preparar recibos_int
PGDATABASE=recibos_int node --experimental-transform-types --test src/__tests__/integracao.test.ts 2>/dev/null \
  | grep -E '^(not ok|# (tests|pass|fail))'
