#!/usr/bin/env bash
# =============================================================================
# Instantané des réponses /api/v1/metadata/* — outil de RECETTE de la refonte
# « metadatas_generated source unique » (04/09/2026).
#
# Usage :
#   scripts/metadata-snapshot.sh <base_url> <api_key> <dossier_sortie>
#   ex. scripts/metadata-snapshot.sh http://127.0.0.1:8011 "$CHAPS_KEY" /tmp/avant
#
# Capture, pour CHAQUE module actif × (sans rôle, admin, viewer) × (fr, en),
# le corps JSON normalisé (jq -S : clés triées). Recette :
#   1. brancher dev, démarrer chaps, snapshot dans .../avant
#   2. brancher refonte-chaps, migrer/seeder, snapshot dans .../apres
#   3. diff -ru .../avant .../apres    → doit être VIDE (identité champ à champ)
# Les en-têtes (ETag) sont ignorés : seul le corps fait contrat.
# =============================================================================
set -euo pipefail

BASE_URL="${1:?base_url requis}"
API_KEY="${2:?api_key requise}"
OUT_DIR="${3:?dossier de sortie requis}"

command -v jq >/dev/null || { echo "jq requis"; exit 1; }
mkdir -p "$OUT_DIR"

MODULES=$(curl -sf -H "X-API-KEY: $API_KEY" -H 'Accept: application/json' \
    "$BASE_URL/api/v1/admin/modules?size=1000" \
    | jq -r '.data[]? // .[]? | select(.is_active == 1 and .is_deleted != 1) | .name' | sort -u)

[ -n "$MODULES" ] || { echo "aucun module actif retourné"; exit 1; }

count=0
for module in $MODULES; do
    for role in "" "admin" "viewer"; do
        for lang in fr en; do
            suffix="${role:-_norole}"
            out="$OUT_DIR/${module}__${suffix}__${lang}.json"
            url="$BASE_URL/api/v1/metadata/${module}?lang=${lang}"
            [ -n "$role" ] && url="${url}&identity_role=${role}"

            if curl -sf -H "X-API-KEY: $API_KEY" -H 'Accept: application/json' "$url" \
                | jq -S 'del(.locale?)' > "$out" 2>/dev/null; then
                count=$((count + 1))
            else
                echo "  ! échec: $url" >&2
                rm -f "$out"
            fi
        done
    done
done

echo "$count réponse(s) capturée(s) dans $OUT_DIR"
