#!/usr/bin/env bash
# ============================================================
# Copyright (c) 2026 RAVAPI Soluções. www.ravapi.com
# Emissões simultâneas na mesma série: sem número duplicado, sem buraco
# ============================================================
set -u
export PATH=/usr/lib/postgresql/16/bin:$PATH
: "${PGHOST:=/tmp}" "${PGPORT:=5599}" "${PGUSER:=postgres}"; export PGHOST PGPORT PGUSER
DB=${1:-recibos_test}
N=${2:-40}
SERIE='a0000000-0000-0000-0000-00000000005b'   # série P, ainda sem uso
USER_ID='a0000000-0000-0000-0000-000000000a01'
TENANT='11111111-1111-1111-1111-111111111111'

echo "Disparando $N emissões simultâneas na série P..."
for i in $(seq 1 "$N"); do
  psql -q -d "$DB" -v ON_ERROR_STOP=1 <<SQL >/dev/null 2>&1 &
SET ROLE recibos_app;
SET app.tenant_id = '$TENANT';
SELECT recibos.selar_recibo('$SERIE','$USER_ID',
  jsonb_build_object('codigo_verificacao','CONC-$i','valor_centavos',$((i*100)),
    'valor_extenso','x','descricao','emissao concorrente $i','forma_pagamento','PIX',
    'data_pagamento','2026-09-11','local_pagamento','Ipatinga',
    'credor_snapshot','{}'::jsonb,'devedor_snapshot','{}'::jsonb,'emitente_papel','DEVEDOR'),
  'canonico|CONC-$i|$((i*100))', 1::smallint);
SQL
done
wait
echo "Concluído. Conferindo:"
psql -d "$DB" <<SQL
\pset format aligned
SELECT count(*)                                   AS emitidos,
       count(DISTINCT numero)                     AS numeros_distintos,
       min(numero)                                AS primeiro,
       max(numero)                                AS ultimo,
       max(numero) - min(numero) + 1 = count(*)   AS sem_buraco,
       count(DISTINCT hash_documento)             AS hashes_distintos,
       count(DISTINCT sequencia_cadeia)           AS elos_distintos
  FROM recibos.receipts WHERE series_id = '$SERIE';

\echo ''
\echo '--- cadeias por serie (cada uma independente) ---'
SELECT serie_codigo AS serie, count(*) AS documentos,
       min(sequencia_cadeia) AS primeiro_elo, max(sequencia_cadeia) AS ultimo_elo,
       count(*) FILTER (WHERE hash_anterior = repeat('0',64)) AS comeca_no_genese
  FROM recibos.receipts
 WHERE company_id = 'a0000000-0000-0000-0000-0000000000c1'
 GROUP BY serie_codigo ORDER BY serie_codigo;

\echo ''
\echo '--- problemas apontados por verificar_cadeia ---'
SELECT * FROM recibos.verificar_cadeia('a0000000-0000-0000-0000-0000000000c1');
SQL
