#!/usr/bin/env bash
# Valida una Tarjeta Semilla pasándola por el parser+validate de brahman-card.
# Uso: seeds/validate.sh seeds/arje-prod.card.json
#
# Método: copiamos la Card como `seed.card.json` en un cwd vacío y corremos
# ente-zero en dev-mode 4 s. Si carga, valida, e instancia genesis, la
# Card es estructuralmente correcta — los binarios de los hijos pueden
# faltar en el host (vivirán en /usr/sbin del initrd).

set -euo pipefail

if [ "$#" -ne 1 ]; then
  echo "uso: $0 <ruta/seed.card.json>" >&2
  exit 2
fi

SEED="$(realpath "$1")"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
BIN="$REPO_DIR/target/release/ente-zero"

if [ ! -x "$BIN" ]; then
  echo "[validate] compilando ente-zero (release)…"
  (cd "$REPO_DIR" && cargo build --quiet --release -p ente-zero)
fi

SCRATCH="$(mktemp -d -t arje-validate.XXXXXX)"
trap 'rm -rf "$SCRATCH"' EXIT
cp "$SEED" "$SCRATCH/seed.card.json"

cd "$SCRATCH"
LOG="$SCRATCH/ente-zero.log"

# `timeout` retorna 124 al matar el proceso (dev-mode termina solo a los 4 s
# de todas formas). Aceptamos cualquier exit code aquí; lo que importa es lo
# que escribió al log.
set +e
timeout 5 "$BIN" >"$LOG" 2>&1
set -e

# Mostrar las líneas relevantes (no es fatal si no aparecen — el check real
# es el `grep -q` siguiente).
grep -E "Tarjeta Semilla cargada|semilla inválida|JSON no contiene|Caused by" \
  "$LOG" | head -5 || true

if grep -q "Tarjeta Semilla cargada y validada" "$LOG"; then
  echo "[validate] OK: $SEED"
  exit 0
fi
echo "[validate] FALLÓ: $SEED" >&2
echo "[validate] log completo:" >&2
sed -n '1,40p' "$LOG" >&2
exit 1
