#!/bin/bash
# Smoke test del módulo orquestador (modo desarrollo).
# Ejecutar DENTRO de WSL:  bash recursos/smoke-orquestador.sh
set -u
BASE="http://localhost:8081/api.php"

say() { printf '\n==================== %s ====================\n' "$1"; }
jpost() { # $1=label  $2=json
  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"}')
echo "$LOGIN"
SK=$(echo "$LOGIN" | grep -oP '"sessionKey"\s*:\s*"\K[^"]+')
if [ -z "$SK" ]; then echo "!! no se obtuvo sessionKey"; exit 1; fi
echo "sessionKey=$SK"

say "2) orq_config GET (asegura fila con defaults)"
jpost "orq_config" "{\"w\":\"orquestador\",\"r\":\"orq_config\",\"sessionKey\":\"$SK\",\"idClient\":1}"

say "3) orq_config SET (emisor + numCuenta + credenciales)"
jpost "orq_config" "{\"w\":\"orquestador\",\"r\":\"orq_config\",\"sessionKey\":\"$SK\",\"idClient\":1,\"emisorNombre\":\"Soda La Esquina S.A.\",\"emisorNombreComercial\":\"Soda La Esquina\",\"emisorNumIdentif\":\"3101424727\",\"emisorEmail\":\"factura@sodalaesquina.cr\",\"numCuenta\":\"288826\",\"oauthUsername\":\"3101424727\",\"oauthPassword\":\"Factura2025*\",\"clientId\":\"api-stag\"}"

say "4) orq_ambiente GET"
jpost "orq_ambiente" "{\"w\":\"orquestador\",\"r\":\"orq_ambiente\",\"sessionKey\":\"$SK\",\"idClient\":1}"

say "5) orq_ambiente SET api-prod"
jpost "orq_ambiente" "{\"w\":\"orquestador\",\"r\":\"orq_ambiente\",\"sessionKey\":\"$SK\",\"idClient\":1,\"env\":\"api-prod\"}"

say "6) orq_ambiente SET api-stag (dev)"
jpost "orq_ambiente" "{\"w\":\"orquestador\",\"r\":\"orq_ambiente\",\"sessionKey\":\"$SK\",\"idClient\":1,\"env\":\"api-stag\"}"

say "7) orq_emitir (payload APPETIT, routing por query string + body crudo)"
cat > /tmp/appetit.json <<'EOF'
{
  "sucursal": "eaba8ba4-c0ec-44b2-a8ab-b32d0b726eef",
  "factura": "0180d74d-dd38-4a78-b72e-336af3e0db05",
  "accion": "ft",
  "UsuarioProveedorFE": "3101424727",
  "ContrasenaProveedorFE": "Factura2025*",
  "NumCuenta": "288826",
  "system": "APPETIT",
  "isProduction": false,
  "jsonData": {
    "NumCuenta": "288826",
    "Documentos": [{
      "Encabezado": {
        "TipoDoc": 4, "NombComercial": "Wombats Empanadas & Galletas",
        "SituacionEnvio": 1, "CantDeci": 5, "Sucursal": 1,
        "CodigoActividad": "5610.0", "Terminal": 1, "Moneda": 1,
        "CondicionVenta": "01",
        "MedioPagos": [{"TipoMedioPago": "2", "TotalMedioPago": "1899.99997"}],
        "FechaFactura": "2026-09-10T15:06:12",
        "NumConsecutivo": "00100001040000000438",
        "ClaveNumerica": "50610092600310293823500100001040000000438192912783"
      },
      "Lineas": [{"Codigo": "2399700000000", "Cantidad": 1, "UnidadMedida": 1,
        "Descripcion": "Chocolate Chips", "PrecioUnitario": "1681.41590",
        "Impuestos": [{"CodigoImp": 1, "CodigoTarifa": 8, "MontoImp": "218.58407", "PorcentajeImp": "13.00000"}]}],
      "Totales": {"TotalServGravado": "0.00000", "TotalGravado": "1681.41590",
        "TotalVenta": "1681.41590", "TotalVentaNeta": "1681.41590",
        "TotalImpuesto": "218.58407", "TotalDescuento": "0.00000",
        "TotalComprobante": "1899.99997"},
      "Otros": {"Notas": "Emiteiendo comprobante electronico"},
      "Extra": {"EsVersion4_4": true}
    }]
  }
}
EOF
curl -s -w '\n[HTTP %{http_code}]\n' -X POST "$BASE?w=orquestador&r=orq_emitir" \
  -H 'Content-Type: application/json' -d @/tmp/appetit.json
echo

say "8) orq_emitir (variante: w/r dentro del JSON)"
cat > /tmp/appetit_wr.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 FE"}
    }]
  }
}
EOF
curl -s -w '\n[HTTP %{http_code}]\n' -X POST "$BASE" -H 'Content-Type: application/json' -d @/tmp/appetit_wr.json
echo

say "9) orq_lista (admin)"
jpost "orq_lista" "{\"w\":\"orquestador\",\"r\":\"orq_lista\",\"sessionKey\":\"$SK\"}"

say "10) orq_estado (por clave)"
jpost "orq_estado" "{\"w\":\"orquestador\",\"r\":\"orq_estado\",\"sessionKey\":\"$SK\",\"clave\":\"50610092600310293823500100001040000000438192912783\"}"

say "11) orq_lista_config (admin)"
jpost "orq_lista_config" "{\"w\":\"orquestador\",\"r\":\"orq_lista_config\",\"sessionKey\":\"$SK\"}"

say "12) orq_subir_p12 (multipart, llave dummy)"
head -c 128 /dev/urandom > /tmp/llave_test.p12
curl -s -w '\n[HTTP %{http_code}]\n' -X POST "$BASE" \
  -F 'w=orquestador' -F 'r=orq_subir_p12' -F "sessionKey=$SK" \
  -F 'idClient=1' -F 'pinP12=1234' -F 'fileToUpload=@/tmp/llave_test.p12'
echo

say "13) orq_procesar (intenta procesar la cola pendiente)"
jpost "orq_procesar" "{\"w\":\"orquestador\",\"r\":\"orq_procesar\",\"sessionKey\":\"$SK\"}"

say "14) orq_lista final (ver estados tras procesar)"
jpost "orq_lista" "{\"w\":\"orquestador\",\"r\":\"orq_lista\",\"sessionKey\":\"$SK\"}"
