#!/usr/bin/env bash
# capture-guard.sh — porta bash di capture-guard.ps1 (il server è Linux, powershell non c'è).
# Hook UserPromptSubmit: rileva frasi-fatto di Alex e inietta additionalContext che OBBLIGA
# Claude a proporre un update CRM nel turno corrente.
# Eseguito da .claude/settings.json → hooks.UserPromptSubmit.
# jq non è installato → il parse/emit JSON lo fa python3 (sempre presente sul server).
# Lo stdin (payload hook) va letto PRIMA in una variabile: l'heredoc qui sotto occupa lo stdin
# di python (è il programma), quindi il JSON si passa via env var CAPTURE_INPUT.
CAPTURE_INPUT="$(cat 2>/dev/null)"
export CAPTURE_INPUT
exec python3 <<'PYEOF'
import os, json, sys

raw = os.environ.get('CAPTURE_INPUT', '')

if not raw or not raw.strip():
    sys.exit(0)

try:
    payload = json.loads(raw)
except Exception:
    sys.exit(0)

prompt = payload.get('prompt') or payload.get('message') or ''
if not isinstance(prompt, str) or not prompt.strip():
    sys.exit(0)

# Pattern frasi-fatto (case-insensitive) — identici alla versione PowerShell
fact_patterns = [
    'ho incassato', 'ho preso', 'mi ha pagato', 'ho ricevuto', 'e in pagamento',
    'è in pagamento', 'ho inviato', 'ho mandato', 'ho spedito', 'fattura inviata',
    'ho chiuso', 'ho firmato', 'abbiamo consegnato', 'ho consegnato', 'ho fatto',
    'ho completato', 'ho chiamato', 'ho parlato con', 'ha detto si', 'ha detto sì',
    'ha accettato', 'ha pagato', 'ci ha pagato', 'ha firmato', 'l ho inviata',
    "l'ho inviata", "l'ho mandata", 'lo ho inviato', 'lo ho mandato',
    # Dal 2026-07-04: variazioni di valore/prezzo — buco scoperto nel caso Deal B
    'ho abbassato', 'ho alzato', 'ho aumentato', 'rifatto il preventivo',
    'preventivo aggiornato', 'nuovo preventivo', 'e sceso a', 'è sceso a',
    'e salito a', 'è salito a', 'nuovo prezzo', 'ho scontato', 'sconto',
    'rinegoziato', 'ho rinegoziato', 'valore aggiornato', 'prezzo aggiornato',
]

prompt_lower = prompt.lower()
if not any(pat in prompt_lower for pat in fact_patterns):
    sys.exit(0)

context = """[CAPTURE-GUARD ATTIVO] L'utente ha appena enunciato un fatto operativo (incasso / invio / azione completata).

OBBLIGO IMMEDIATO — prima di qualsiasi altra risposta:
1. Identifica l'entità CRM coinvolta (lead / order / task / project).
2. Proponi l'esatto comando CRM da eseguire:
   - Incasso → `crm order pay <orderId> [--balance|--deposit] [--amount=N] [--date=YYYY-MM-DD]`
   - Azione eseguita → `crm tasks complete <taskId>` o `crm actions complete <actionId>`
   - Nota diario → `crm:log -- "--message=..." "--project=<keyword>"`
   - Nuovo task/progetto mancante → `crm tasks create` o `crm projects create`
   - Valore/prezzo cambiato (preventivo rifatto, sconto, rinegoziazione) → se il valore vive come testo in un task: `crm tasks update <taskId> --title="..."` (aggiorna anche la description se contiene la cifra vecchia). Se il valore vive su un ordine attivo, verifica prima con Alex come intende registrarlo (l'API ordini oggi non supporta update diretto del valore da CLI)
3. Chiedi conferma ad Alex: "Confermo e aggiorno il CRM?" (mostra il comando esatto).
4. Dopo conferma: ESEGUI il comando nel turno corrente. Non rimandare a fine sessione.

Se l'entità CRM non è identificabile con certezza, chiedila prima di proporre il comando.
NON procedere con altre risposte finché non hai gestito questa cattura."""

out = {
    "hookSpecificOutput": {
        "hookEventName": "UserPromptSubmit",
        "additionalContext": context,
    }
}
print(json.dumps(out, ensure_ascii=False))
sys.exit(0)
PYEOF
