#!/usr/bin/env bash
# Reconciliation audit for the per-turn directive store (Task 746). For each
# session it emits `[prompt-optimiser-audit] session=<id> injected=<N> stored=<M>`
# (N = breadcrumb lines, M = content files) and names any breadcrumb whose
# file= path is missing on disk (the precise silent loss).
set -u
SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/prompt-optimiser-audit.sh"
[[ -x "$SCRIPT" ]] || { echo "FAIL: $SCRIPT not executable" >&2; exit 1; }
PASS=0; FAIL=0

LD=$(mktemp -d)
mkdir -p "$LD/prompt-optimiser-directives/sessA"
f1="$LD/prompt-optimiser-directives/sessA/100-11.txt"; printf 'one' > "$f1"
f2="$LD/prompt-optimiser-directives/sessA/101-12.txt"; printf 'two' > "$f2"
crumb="$LD/prompt-optimiser-directive.log"
printf 'T [prompt-optimiser-directive] injected len=3 sha256=x file=%s session=sessA\n' "$f1" >> "$crumb"
printf 'T [prompt-optimiser-directive] injected len=3 sha256=y file=%s session=sessA\n' "$f2" >> "$crumb"

# Healthy: 2 breadcrumbs, 2 files.
out=$(bash "$SCRIPT" --log-dir "$LD" sessA 2>/dev/null)
if printf '%s' "$out" | grep -q "\[prompt-optimiser-audit\] session=sessA injected=2 stored=2"; then
  echo "PASS: healthy session reconciles injected==stored"; PASS=$((PASS+1))
else
  echo "FAIL: healthy reconcile wrong: $out" >&2; FAIL=$((FAIL+1))
fi

# Leak: delete one content file -> injected=2 stored=1 + a missing-file line.
rm -f "$f2"
out=$(bash "$SCRIPT" --log-dir "$LD" sessA 2>/dev/null)
if printf '%s' "$out" | grep -q "session=sessA injected=2 stored=1" \
   && printf '%s' "$out" | grep -q "missing-file=$f2"; then
  echo "PASS: deleted file flagged as leak (injected>stored + missing-file)"; PASS=$((PASS+1))
else
  echo "FAIL: leak not flagged: $out" >&2; FAIL=$((FAIL+1))
fi

# No argument -> walks every session in the breadcrumb log.
printf 'T [prompt-optimiser-directive] injected len=1 sha256=z file=- session=sessB\n' >> "$crumb"
out=$(bash "$SCRIPT" --log-dir "$LD" 2>/dev/null)
if printf '%s' "$out" | grep -q "session=sessA " && printf '%s' "$out" | grep -q "session=sessB "; then
  echo "PASS: no-arg mode walks all sessions"; PASS=$((PASS+1))
else
  echo "FAIL: no-arg mode missed a session: $out" >&2; FAIL=$((FAIL+1))
fi
# An explicitly-named session with no breadcrumbs reconciles cleanly to 0==0 on
# a single line (regression: grep -c's exit-1 must not double-emit "0\n0").
out=$(bash "$SCRIPT" --log-dir "$LD" sessZ 2>/dev/null); rc=$?
nlines=$(printf '%s\n' "$out" | grep -c 'session=sessZ injected=')
if [[ "$rc" -eq 0 ]] \
   && printf '%s' "$out" | grep -Fqx "[prompt-optimiser-audit] session=sessZ injected=0 stored=0" \
   && [[ "$nlines" -eq 1 ]]; then
  echo "PASS: empty named session -> single clean injected=0 stored=0, rc=0"; PASS=$((PASS+1))
else
  echo "FAIL: empty named session mis-reported (rc=$rc lines=$nlines out=$out)" >&2; FAIL=$((FAIL+1))
fi
rm -rf "$LD"

echo "----"; echo "PASS=$PASS FAIL=$FAIL"
[[ "$FAIL" -eq 0 ]]
