#!/usr/bin/env bash
# Regression test for harness_orchestrator.sh self-snapshot execution.
# Hermetic: exercises only the snapshot primitive; no codex/network/build work.
set -u

PASS=0
FAIL=0

ok() {
    echo "PASS: $1"
    PASS=$((PASS + 1))
}

no() {
    echo "FAIL: $1"
    FAIL=$((FAIL + 1))
}

SBX="$(mktemp -d)"
trap 'rm -rf "$SBX"' EXIT

ORIG_DIR="$SBX/original-tools"
mkdir -p "$ORIG_DIR"
READY="$SBX/ready"
OUT="$SBX/out.txt"
SCRIPT="$ORIG_DIR/tiny_snapshot.sh"

cat > "$SCRIPT" <<'SCRIPT'
#!/usr/bin/env bash
set -u

if [ -z "${HARNESS_ORCHESTRATOR_SNAPSHOT:-}" ]; then
    __orig_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    __snap="${TMPDIR:-/tmp}/harness_orchestrator.$$.${RANDOM}.sh"
    if cp "${BASH_SOURCE[0]}" "$__snap" 2>/dev/null; then
        HARNESS_TEST_REEXEC_COUNT="${HARNESS_TEST_REEXEC_COUNT:-0}"
        HARNESS_TEST_REEXEC_COUNT=$((HARNESS_TEST_REEXEC_COUNT + 1))
        export HARNESS_ORCHESTRATOR_SNAPSHOT=1 HARNESS_ORIGINAL_SCRIPT_DIR="$__orig_dir" HARNESS_SNAPSHOT_PATH="$__snap" HARNESS_TEST_REEXEC_COUNT
        exec bash "$__snap" "$@"
        echo "WARNING: harness self-snapshot exec failed; continuing from mutable script." >&2
    else
        echo "WARNING: harness self-snapshot copy failed; continuing from mutable script." >&2
    fi
fi

SCRIPT_DIR="${HARNESS_ORIGINAL_SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"

cleanup() {
    rm -f "${HARNESS_SNAPSHOT_PATH:-}" 2>/dev/null || true
}
trap cleanup EXIT

printf 'REEXEC_COUNT=%s\n' "${HARNESS_TEST_REEXEC_COUNT:-0}"
printf 'SCRIPT_DIR=%s\n' "$SCRIPT_DIR"
printf 'SOURCE_PATH=%s\n' "${BASH_SOURCE[0]}"
printf 'SNAPSHOT_PATH=%s\n' "${HARNESS_SNAPSHOT_PATH:-}"
printf 'ready\n' > "$1"
sleep 1
printf 'FINAL_MARKER\n'
SCRIPT
chmod +x "$SCRIPT"

TMPDIR="$SBX/tmp"
mkdir -p "$TMPDIR"

TMPDIR="$TMPDIR" bash "$SCRIPT" "$READY" > "$OUT" 2>&1 &
pid=$!

count=0
while [ ! -f "$READY" ] && kill -0 "$pid" 2>/dev/null; do
    sleep 0.05
    count=$((count + 1))
    if [ "$count" -gt 100 ]; then
        break
    fi
done

if [ -f "$READY" ]; then
    {
        echo 'echo MUTATED_ORIGINAL_EXECUTED'
        echo 'exit 77'
        i=0
        while [ "$i" -lt 2000 ]; do
            echo ':'
            i=$((i + 1))
        done
    } >> "$SCRIPT"
else
    no "throwaway script reached mid-run mutation point"
fi

wait "$pid"
rc=$?

if [ "$rc" -eq 0 ]; then
    ok "self-edited original did not corrupt running snapshot"
else
    no "self-edited run exited $rc"
fi

if grep -q '^FINAL_MARKER$' "$OUT"; then
    ok "expected final marker printed"
else
    no "expected final marker missing"
fi

reexec_lines="$(grep -c '^REEXEC_COUNT=1$' "$OUT" 2>/dev/null || true)"
if [ "$reexec_lines" -eq 1 ]; then
    ok "guard re-execed exactly once"
else
    no "guard re-exec count was not exactly one"
fi

if grep -q "^SCRIPT_DIR=$ORIG_DIR$" "$OUT"; then
    ok "SCRIPT_DIR equivalent resolves to original dir"
else
    no "SCRIPT_DIR equivalent did not resolve to original dir"
fi

source_path="$(sed -n 's/^SOURCE_PATH=//p' "$OUT" | head -1)"
case "$source_path" in
    "$ORIG_DIR"/*)
        no "re-execed process still ran from original script path"
        ;;
    "$SBX/tmp"/harness_orchestrator.*.sh)
        ok "re-execed process ran from immutable snapshot"
        ;;
    *)
        no "re-execed process source path was unexpected: $source_path"
        ;;
esac

if grep -q '^MUTATED_ORIGINAL_EXECUTED$' "$OUT"; then
    no "appended original-script payload executed"
else
    ok "appended original-script payload did not execute"
fi

echo "Assertions: $PASS passed, $FAIL failed"
[ "$FAIL" -eq 0 ]
