#!/usr/bin/env bash
# ============================================================================
# SafeDoc — anonymise un fichier SANS que l'IA n'en lise le contenu.
#
# IDEE : un agent IA (Claude Cowork, etc.) lance CE script au lieu d'ouvrir le
# fichier. Le fichier est streame a SafeDoc (serveurs EU) ; SEUL le texte masque
# ressort sur stdout. L'IA ne voit jamais le contenu brut, juste la sortie masquee.
#
# Usage :
#   SAFEDOC_API_KEY=sd_xxx ./safedoc-anonymize.sh <fichier> [N1|N2]
#
# - <fichier>   : PDF, DOCX, TXT, MD, image...
# - N1 (defaut) : tout masque en jetons.  N2 : generalisation (fourchettes...).
# - Table de correspondance sauvegardee EN LOCAL dans "<fichier>.safedoc-map.json"
#   (contient les vraies valeurs -> reste sur ta machine, sert a restaurer).
#
# Cle API : a generer sur l'onglet "Connecter a Claude" de SafeDoc.
# ============================================================================
set -euo pipefail

FILE="${1:?Usage: safedoc-anonymize.sh <fichier> [N1|N2]}"
LEVEL="${2:-N1}"
: "${SAFEDOC_API_KEY:?Definis SAFEDOC_API_KEY (ta cle sd_... depuis l onglet Connecter a Claude)}"
BASE="${SAFEDOC_URL:-https://safe-doc.ai}"
[ -f "$FILE" ] || { echo "Fichier introuvable: $FILE" >&2; exit 1; }

TMP="$(mktemp)"
trap 'rm -f "$TMP"' EXIT
curl -sS -F "file=@${FILE}" -F "level=${LEVEL}" -F "mode=anonymize" \
  -H "Authorization: Bearer ${SAFEDOC_API_KEY}" "${BASE}/api_v2/upload" > "$TMP"

SAFEDOC_RESP="$TMP" SAFEDOC_MAP="${FILE}.safedoc-map.json" python3 <<'PYEOF'
import os, json, sys
resp = json.load(open(os.environ["SAFEDOC_RESP"], encoding="utf-8"))
if "anonymized_text" not in resp:
    sys.stderr.write("Erreur SafeDoc: " + str(resp.get("detail", resp))[:300] + "\n")
    sys.exit(1)
with open(os.environ["SAFEDOC_MAP"], "w", encoding="utf-8") as f:
    json.dump(resp.get("mapping", {}), f, ensure_ascii=False)
sys.stdout.write(resp.get("anonymized_text", ""))
PYEOF

echo >&2 "OK - table de correspondance enregistree en local : ${FILE}.safedoc-map.json"
