#!/usr/bin/env bash
# Arranque rápido de la API de auditoría de facturas de MuninCloud (v1), con curl.
#
#   MC_VALE=<el vale de tu enlace de recogida> MC_NIF=<NIF de la empresa> MC_NOMBRE="<su nombre o razón social>" \
#   MC_TIPO=compra bash inicio_rapido.sh factura.pdf
#
# MC_NIF y MC_NOMBRE son los de la empresa cuyas facturas vas a enviar (puede ser la tuya o la de un cliente tuyo).
# MC_TIPO dice qué es esa factura PARA ESA EMPRESA: «compra» si la recibe (es el cliente), «venta» si la emite (es el
# proveedor). Necesitas curl y python3 (solo para escribir y leer el JSON). Las llaves se guardan en ficheros con
# permisos 600 en el directorio actual (mc_llave_administrar, mc_llave_procesar): nunca se imprimen.
set -euo pipefail

# ── paso 0 · lo que usan los pasos: la dirección de la API, la factura, compra o venta, y un lector de JSON ──
API="${MC_API:-https://api.munincloud.com}"
FACTURA="${1:?uso: MC_VALE=… MC_NIF=… MC_NOMBRE=… MC_TIPO=compra|venta bash inicio_rapido.sh factura.pdf}"
TIPO="${MC_TIPO:?pon en MC_TIPO compra (la empresa recibe la factura) o venta (la emite)}"
case "$TIPO" in compra|venta) ;; *) echo "MC_TIPO tiene que ser compra o venta, no «$TIPO»" >&2; exit 2 ;; esac
campo() { python3 -c 'import json,sys; print(json.load(sys.stdin)[sys.argv[1]])' "$1"; }
umask 077   # los ficheros de las llaves nacen legibles solo por ti
# ── fin paso 0 ──

# ── paso 1 · canjear el vale por la llave de administrar (una sola vez) ──
# El vale es lo que va detrás de «#vale=» en el enlace que recibes tras la compra. Sirve UNA vez.
curl -sS -X POST "$API/v1/recogida" \
  -H "Content-Type: application/json" \
  -d "{\"vale\": \"${MC_VALE:?pon en MC_VALE el vale de tu enlace}\"}" > recogida.json
campo llave < recogida.json > mc_llave_administrar   # sin «&&»: con set -e, un fallo aquí PARA el guion
rm recogida.json
# ── fin paso 1 ──

# ── paso 2 · crear una llave de procesar para la empresa: su NIF y su nombre, los dos obligatorios ──
# El JSON lo escribe python3 para que un nombre con comillas o tildes vaya bien escrito.
: "${MC_NIF:?pon en MC_NIF el NIF de la empresa}" "${MC_NOMBRE:?pon en MC_NOMBRE el nombre o razón social de la empresa}"
python3 -c 'import json,os; print(json.dumps({"cif": os.environ["MC_NIF"], "nombre": os.environ["MC_NOMBRE"]}))' > llave_nueva.json
curl -sS -X POST "$API/v1/llaves" \
  -H "Authorization: Bearer $(cat mc_llave_administrar)" \
  -H "Content-Type: application/json" \
  -d @llave_nueva.json > llave.json
campo llave < llave.json > mc_llave_procesar
rm llave.json
# ── fin paso 2 ──

# ── paso 3 · subir una factura diciendo si es compra o venta: la API contesta enseguida con un número de trabajo ──
curl -sS "$API/v1/trabajos" \
  -H "Authorization: Bearer $(cat mc_llave_procesar)" \
  -H "Idempotency-Key: $(basename "$FACTURA")-$TIPO-$(date +%Y%m%d)" \
  -F "tipo=$TIPO" \
  -F "factura=@$FACTURA" | tee trabajo.json
echo
TRABAJO=$(campo trabajo < trabajo.json)
# ── fin paso 3 ──

# ── paso 4 · consultar el trabajo hasta que deje de estar «en_curso», respetando Retry-After ──
while :; do
  curl -sS -D cabeceras.txt "$API/v1/trabajos/$TRABAJO" \
    -H "Authorization: Bearer $(cat mc_llave_procesar)" > resultado.json
  [ "$(campo estado < resultado.json)" = "en_curso" ] || break
  ESPERA=$(sed -n 's/^[Rr]etry-[Aa]fter: *\([0-9]*\).*/\1/p' cabeceras.txt)
  sleep "${ESPERA:-5}"
done
cat resultado.json; echo
# ── fin paso 4 ──

# ── paso 5 · ver lo que queda en la pool ──
curl -sS "$API/v1/pool" -H "Authorization: Bearer $(cat mc_llave_procesar)"
echo
# ── fin paso 5 ──
