#!/usr/bin/env bash
# CHECK-q144 -- the four entry points Q144 repaired read green, the baseline
# still covers every entry point, and the albums gate still reds when its table
# is wrong (a repair that only ever prints PASS is the class this queue files).
#
# Legs:
#   albums    wizard-work/ledger/2026-10-29-albums-census/CHECK -> rc 0, "CHECK: OK"
#   sol       wizard-work/sol/CHECK-sol-l030 -> rc 0, "re-derives 12/12"
#   census    wizard-work/ledger/CHECK-wizard-work-census-2026-11-01 -> rc 0
#   q143      ./CHECK-q143 (selftest 20 cells + entry-point set) -> rc 0
#   baseline  check_sweep.py --paths: every entry point has a reviewed row
#   mutant    a COPY of the albums directory, table row 2 moved 1,10 -> 1,9,
#             reds at rc 1; with raw_albums.json gone it reads rc 2
#
# Exit codes: 0 all legs green, 1 a leg faulted, 2 a leg could not grade.
set -u
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit 2
ROOT="$(cd "$HERE/../../.." && pwd)" || exit 2
PY="${PYTHON:-python3}"
ALB="$ROOT/wizard-work/ledger/2026-10-29-albums-census"
SOL="$ROOT/wizard-work/sol"
CEN="$ROOT/wizard-work/ledger"
SWEEP="$ROOT/wizard-work/volt/q143-check-sweep/check_sweep.py"
WORK="$(mktemp -d "${TMPDIR:-/tmp}/check-q144.XXXXXX")" || exit 2
trap 'rm -rf "$WORK"' EXIT
rc=0
legs=0
faults=0

row() { printf '  %-9s %s\n' "$1" "$2"; }

# expect <name> <want-rc> <want-text> <command...>
expect() {
    name="$1"; want="$2"; text="$3"; shift 3
    legs=$((legs + 1))
    out="$("$@" 2>&1)"
    got=$?
    if [ "$got" -eq "$want" ] && printf '%s' "$out" | grep -qF -- "$text"; then
        row "$name" "PASS rc=$got $(printf '%s' "$out" | tail -1 | cut -c1-64)"
    else
        faults=$((faults + 1)); rc=1
        row "$name" "FAULT want rc=$want/'$text' got rc=$got: $(printf '%s' "$out" | tail -1 | cut -c1-90)"
    fi
}

expect albums   0 "CHECK: OK"        bash "$ALB/CHECK"
expect sol      0 "re-derives 12/12" bash "$SOL/CHECK-sol-l030"
expect census   0 "PASS"             bash "$CEN/CHECK-wizard-work-census-2026-11-01"
expect q143     0 "all passed"       bash "$ROOT/CHECK-q143"
expect baseline 0 "0 fault(s)"       "$PY" "$SWEEP" --repo "$ROOT" --paths

# mutant: the same check on a copy whose table is wrong, then whose source is gone
legs=$((legs + 1))
cp -a "$ALB" "$WORK/albums" || exit 2
sed -i '2s/,10$/,9/' "$WORK/albums/albums_by_user.csv"
bash "$WORK/albums/CHECK" >"$WORK/m1.txt" 2>&1; m1=$?
mv "$WORK/albums/raw_albums.json" "$WORK/albums/raw_albums.json.bak"
bash "$WORK/albums/CHECK" >"$WORK/m2.txt" 2>&1; m2=$?
if [ "$m1" -eq 1 ] && grep -qF "CHECK: MISMATCH" "$WORK/m1.txt" && [ "$m2" -eq 2 ]; then
    row mutant "PASS wrong-table rc=1, missing-source rc=$m2"
else
    faults=$((faults + 1)); rc=1
    row mutant "FAULT wrong-table rc=$m1 missing-source rc=$m2"
fi

if [ "$rc" -eq 0 ]; then
    echo "q144: $legs leg(s), all passed"
else
    echo "q144: $legs leg(s), $faults fault(s)"
fi
exit "$rc"
