#!/bin/bash
# Smoke test CICLO COMPLETO: emitir -> pendiente -> procesar -> consultar estado.
# Ejecutar DENTRO de WSL:  bash recursos/smoke-ciclo.sh
set -u
BASE="http://localhost:8081/api.php"
say() { printf '\n==================== %s ====================\n' "$1"; }
jpost() { echo "--- $1 ---"; curl -s -w '\n[HTTP %{http_code}]\n' -X POST "$BASE" -H 'Content-Type: application/json' -d "$2"; echo; }

say "1) login admin"
LOGIN=$(curl -s -X POST "$BASE" -H 'Content-Type: application/json' -d '{"w":"manager","r":"manager_login","userName":"admin","pwd":"admin123"}')
SK=$(echo "$LOGIN" | grep -oP '"sessionKey"\s*:\s*"\K[^"]+')
echo "sessionKey=$SK"
[ -z "$SK" ] && { echo "!! no se obtuvo sessionKey"; exit 1; }

say "2) orq_emitir (enviar documento desde el sistema externo)"
cat > /tmp/doc.json <<'EOF'
{"w":"orquestador","r":"orq_emitir","isProduction":false,"NumCuenta":"288826",
 "jsonData":{"Documentos":[{
   "Encabezado":{"TipoDoc":1,"NombComercial":"Soda La Esquina","SituacionEnvio":1,"CantDeci":5,
     "Sucursal":1,"CodigoActividad":"5610.0","Terminal":1,"Moneda":1,"CondicionVenta":"01",
     "MedioPagos":[{"TipoMedioPago":"1","TotalMedioPago":"1130.00"}],
     "FechaFactura":"2026-09-10T15:06:12","NumConsecutivo":"00100001040000000101",
     "ClaveNumerica":"50610092600310293823500100001040000000101187654321"},
   "Receptor":{"TipoIdentificacion":"01","NumIdentificacion":"3101424727","Nombre":"Consumidor Final"},
   "Lineas":[{"Codigo":"2399700000000","Cantidad":1,"UnidadMedida":1,"Descripcion":"Producto de prueba",
     "PrecioUnitario":"1000.00000","Impuestos":[{"CodigoImp":1,"CodigoTarifa":8,"MontoImp":"130.00000","PorcentajeImp":"13.00000"}]}],
   "Totales":{"TotalServGravado":"0.00000","TotalGravado":"1000.00000","TotalVenta":"1000.00000",
     "TotalVentaNeta":"1000.00000","TotalImpuesto":"130.00000","TotalDescuento":"0.00000","TotalComprobante":"1130.00000"},
   "Otros":{"Notas":"Prueba ciclo completo"}}]}}
EOF
RESP=$(curl -s -X POST "$BASE" -H 'Content-Type: application/json' -d @/tmp/doc.json)
echo "$RESP"
CLAVE=$(echo "$RESP" | grep -oP '"clave":"\K[^"]+')
IDQ=$(echo "$RESP" | grep -oP '"idQueue":\K[0-9]+')
echo ">> clave=$CLAVE  idQueue=$IDQ"
[ -z "$CLAVE" ] && { echo "!! no se obtuvo clave"; exit 1; }

say "3) orq_estado (consultar ANTES de procesar — debe estar 'pendiente')"
jpost "orq_estado" "{\"w\":\"orquestador\",\"r\":\"orq_estado\",\"sessionKey\":\"$SK\",\"clave\":\"$CLAVE\"}"

say "4) orq_procesar (procesa SOLO este documento; con credenciales falsas falla en token con gracia)"
jpost "orq_procesar" "{\"w\":\"orquestador\",\"r\":\"orq_procesar\",\"sessionKey\":\"$SK\",\"idQueue\":$IDQ}"

say "5) orq_estado (consultar DESPUÉS — debe reflejar el resultado del envío a Hacienda)"
jpost "orq_estado" "{\"w\":\"orquestador\",\"r\":\"orq_estado\",\"sessionKey\":\"$SK\",\"idQueue\":$IDQ}"

say "6) orq_lista (columna de estado en la cola)"
jpost "orq_lista" "{\"w\":\"orquestador\",\"r\":\"orq_lista\",\"sessionKey\":\"$SK\",\"idClient\":1}"

say "7) manager_invoices (reflejo de la factura en el panel /invoices)"
docker exec crlibre-mariadb mysql -uroot -prootpwd api_hacienda_db -e "SELECT idInvoice,idClient,consecutivo,clave,tipoDocumento,estado,total,moneda,respuestaMH FROM manager_invoices WHERE clave='$CLAVE' ORDER BY idInvoice DESC LIMIT 1\G"

say "8) orq_test (validación contra endpoints reales de Hacienda)"
jpost "orq_test" "{\"w\":\"orquestador\",\"r\":\"orq_test\",\"sessionKey\":\"$SK\",\"idClient\":1}"
