#!/usr/bin/env bash
# session-log.sh — porta bash di session-log.ps1 (il server è Linux, powershell non c'è).
# Invocato dall'hook Stop di Claude Code (.claude/settings.json).
# Appende un'entry leggera a session-log.md alla PRIMA stop di ogni sessione (dedup via session_id),
# esegue il check deterministico `crm tasks overdue --count` (r.22) e stampa il reminder fine-sessione.
# Guard anti-ricorsione: stop_hook_active + CLAUDE_HEADLESS.

# Guard: skip se invocato da headless claude (morning-report, weekly-report)
[ -n "$CLAUDE_HEADLESS" ] && exit 0

VAULT="/home/deploy/Business"
LOG_FILE="$VAULT/90_AI/session-log.md"
CACHE_DIR="$VAULT/90_AI/.cache"

# Solo se cwd è il vault Business
case "$PWD" in
  *Business*) ;;
  *) exit 0 ;;
esac

# Leggi il payload JSON da stdin → session_id + stop_hook_active (parse con python3, jq assente)
RAW="$(cat 2>/dev/null)"
PARSED="$(printf '%s' "$RAW" | python3 -c '
import sys, json
sid, active = "unknown", "0"
try:
    d = json.loads(sys.stdin.read() or "{}")
    sid = str(d.get("session_id") or "unknown")
    active = "1" if d.get("stop_hook_active") else "0"
except Exception:
    pass
print(sid + "\t" + active)
' 2>/dev/null)"
SESSION_ID="${PARSED%%$'\t'*}"
STOP_ACTIVE="${PARSED##*$'\t'}"
[ -z "$SESSION_ID" ] && SESSION_ID="unknown"

# Guard: previeni ricorsione (già dentro un hook Stop)
[ "$STOP_ACTIVE" = "1" ] && exit 0

SID8="${SESSION_ID:0:8}"
TS="$(date '+%Y-%m-%d %H:%M')"

mkdir -p "$CACHE_DIR"

# Deduplication: una entry per sessione (basato su session_id)
DEDUP_FILE="$CACHE_DIR/session-logged-$SID8.lock"
[ -f "$DEDUP_FILE" ] && exit 0
: > "$DEDUP_FILE"

# Pulizia .lock di dedup più vecchi di 7 giorni (evita accumulo silenzioso in .cache)
find "$CACHE_DIR" -maxdepth 1 -name 'session-logged-*.lock' -mtime +7 -delete 2>/dev/null

# Crea session-log.md con header se non esiste
if [ ! -f "$LOG_FILE" ]; then
  printf '# Session Log - AutoMate PRO\n\n> Aggiornato automaticamente dallo Stop hook di Claude Code. Una entry per sessione.\n' > "$LOG_FILE"
fi

# Appendi entry (TS include già data+ora → niente data doppia come nel vecchio PS1)
printf '\n## %s | session: %s\n- Vault: %s | turno stop registrato\n' "$TS" "$SID8" "$VAULT" >> "$LOG_FILE"

# Check DETERMINISTICO task scaduti (r.22) — lista reale invece del reminder generico ignorabile
OVERDUE_COUNT=""
OVERDUE_TABLE=""
if [ -d "$VAULT/crm-app" ]; then
  COUNT_RAW="$(cd "$VAULT/crm-app" && npm run --silent crm tasks overdue -- --count 2>/dev/null | tr -d '[:space:]')"
  if printf '%s' "$COUNT_RAW" | grep -qE '^[0-9]+$'; then
    OVERDUE_COUNT="$COUNT_RAW"
    if [ "$OVERDUE_COUNT" -gt 0 ]; then
      OVERDUE_TABLE="$(cd "$VAULT/crm-app" && npm run --silent crm tasks overdue 2>/dev/null)"
    fi
  fi
fi

# Reminder fine sessione — su stdout (visibile come system-reminder al prossimo turno)
echo "--- REMINDER fine sessione ---"
if [ -n "$OVERDUE_COUNT" ]; then
  if [ "$OVERDUE_COUNT" -gt 0 ]; then
    echo "r.22: $OVERDUE_COUNT task SCADUTI nel CRM (lista globale, deterministica, crm tasks overdue):"
    echo "$OVERDUE_TABLE"
    echo "Prima di chiudere la sessione: per ognuno decidi chiudi (verificato) / proponi (ambiguo) / lascia con motivo — vedi /save-progress step 2c."
  else
    echo "r.22: 0 task scaduti nel CRM. Nessuna chiusura pendente."
  fi
else
  echo "r.22: impossibile verificare i task scaduti (CRM non raggiungibile) — controlla manualmente con 'npm run crm tasks overdue'."
fi
echo "Diario progetto aggiornato? → npm run crm:log -- --message=... --project=..."
echo "Se sessione lunga su un cliente → /save-progress"
echo "-------------------------------"
exit 0
