#!/usr/bin/env bash
# 06-casos-limite.sh — los casos límite que cita el guion.
#
# Demuestra:
#   * 409  nombre duplicado en POST /api/ingest-keys
#   * 400  level con espacios (" info ") — NO se recorta
#   * 400  message vacío tras trim
#   * 415  sin Content-Type: application/json
#   * 400  mark-read con ids:null
#   * 400  mark-read con ids:[]  (lista vacía)
#   * 400  unread con limit fuera de rango o no numérico
#
# Uso:  ./06-casos-limite.sh
set -euo pipefail

BASE="${VALET_BASE:-http://127.0.0.1:3458}"
WORK="${WORKDIR:-/tmp/opencode/valet-847}"

echo "== 409: nombre duplicado 'backup-host' =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/ingest-keys" \
  -H "Content-Type: application/json" -d '{"name":"backup-host"}'

echo
echo "== crear una clave nueva 'monitor' para los límites =="
RAW=$(curl -s -w $'\n%{http_code}' -X POST "$BASE/api/ingest-keys" \
  -H "Content-Type: application/json" -d '{"name":"monitor"}')
printf '%s' "$RAW" | head -n1 | python3 -c '
import sys, json
d = json.load(sys.stdin)
print(json.dumps({"id": d["id"], "name": d["name"], "prefix": d["prefix"],
                  "token": d["token"][:12] + "<…>"}, ensure_ascii=False))
'
echo "[$(printf '%s' "$RAW" | tail -n1)]"
printf '%s' "$RAW" | head -n1 | python3 -c 'import sys,json;print(json.load(sys.stdin)["token"])' > "$WORK/token2.txt"
T2="$(cat "$WORK/token2.txt")"

echo
echo "== 400: level con espacios (\" info \") =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications" \
  -H "Authorization: Bearer $T2" -H "Content-Type: application/json" \
  -d '{"message":"prueba","level":" info "}'

echo
echo "== 400: message vacío tras trim =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications" \
  -H "Authorization: Bearer $T2" -H "Content-Type: application/json" \
  -d '{"message":"   "}'

echo
echo "== 415: sin Content-Type =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications" \
  -H "Authorization: Bearer $T2" -d '{"message":"x"}'

echo
echo "== 400: mark-read con ids:null =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications/mark-read" \
  -H "Content-Type: application/json" -d '{"ids":null}'

echo
echo "== 400: mark-read con ids:[] =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications/mark-read" \
  -H "Content-Type: application/json" -d '{"ids":[]}'

echo
echo "== 400: unread limit=999 (fuera de [1,200]) =="
curl -s -w "\n[%{http_code}]\n" "$BASE/api/notifications/unread?limit=999"

echo
echo "== 400: metadata no objeto (array) =="
curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications" \
  -H "Authorization: Bearer $T2" -H "Content-Type: application/json" \
  -d '{"message":"x","metadata":[1,2]}'

echo
echo "== 400: message > 4096 bytes =="
python3 -c 'print("{\"message\":\"" + "a"*4100 + "\"}")' \
  | curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications" \
      -H "Authorization: Bearer $T2" -H "Content-Type: application/json" --data @-

echo
echo "== 413: cuerpo > 64 KiB =="
python3 -c 'print("{\"message\":\"" + "a"*70000 + "\"}")' \
  | curl -s -w "\n[%{http_code}]\n" -X POST "$BASE/api/notifications" \
      -H "Authorization: Bearer $T2" -H "Content-Type: application/json" --data @-
