#!/usr/bin/env bash
set -uo pipefail

ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
TMP=$(mktemp -d "$HOME/.cache/remote-runner-path-XXXXXX")
trap 'rm -rf "$TMP"' EXIT

mkdir -p "$TMP/home/.cargo/bin" "$TMP/home/.config/environment.d" "$TMP/job" "$TMP/mirror"
cat > "$TMP/home/.cargo/bin/cargo" <<'EOF'
#!/usr/bin/env bash
printf 'cargo-from-rustup\n'
EOF
chmod +x "$TMP/home/.cargo/bin/cargo"
printf 'PATH=/usr/local/bin:/usr/bin:/bin\n' > "$TMP/home/.config/environment.d/10-base.conf"

HOME="$TMP/home" SUPERVISOR_BIN="$ROOT/lib/command-supervisor.mjs" bash "$ROOT/lib/remote-runner.sh" "$TMP/job" "$TMP/mirror" . cargo --version
rc=$(cat "$TMP/job/rc")
out=$(cat "$TMP/job/log")

if [ "$rc" != 0 ] || [ "$out" != cargo-from-rustup ]; then
  printf 'FAIL remote runner lost cargo after environment.d (rc=%s output=%s)\n' "$rc" "$out" >&2
  exit 1
fi
printf 'PASS remote runner preserves cargo after environment.d\n'

display_job="$TMP/job-display"
printf 'DISPLAY=:0\nWAYLAND_DISPLAY=wayland-0\n' > "$TMP/home/.config/environment.d/20-x11.conf"
HOME="$TMP/home" SUPERVISOR_BIN="$ROOT/lib/command-supervisor.mjs" bash "$ROOT/lib/remote-runner.sh" "$display_job" "$TMP/mirror" . bash -c 'test -z "${DISPLAY:-}"'
display_rc=$(cat "$display_job/rc")
display_out=$(cat "$display_job/log")
if [ "$display_rc" != 0 ]; then
  printf 'FAIL remote runner leaked DISPLAY (rc=%s output=%s)\n' "$display_rc" "$display_out" >&2
  exit 1
fi
printf 'PASS remote runner strips forwarded DISPLAY\n'

nonzero_job="$TMP/job-nonzero"
set +e
HOME="$TMP/home" SUPERVISOR_BIN="$ROOT/lib/command-supervisor.mjs" bash "$ROOT/lib/remote-runner.sh" "$nonzero_job" "$TMP/mirror" . bash -c 'exit 7'
nonzero_rc=$?
set -e
nonzero_receipt=$(cat "$nonzero_job/rc" 2>/dev/null || true)
if [ "$nonzero_rc" -ne 7 ] || [ "$nonzero_receipt" != 7 ]; then
  printf 'FAIL remote runner nonzero receipt (process_rc=%s receipt=%s)\n' "$nonzero_rc" "$nonzero_receipt" >&2
  exit 1
fi
printf 'PASS remote runner preserves nonzero receipt\n'

term_job="$TMP/job-term"
set +e
HOME="$TMP/home" SUPERVISOR_BIN="$ROOT/lib/command-supervisor.mjs" bash "$ROOT/lib/remote-runner.sh" "$term_job" "$TMP/mirror" . bash -c 'kill -TERM "$PPID"; exit 0'
term_rc=$?
set -e
receipt=$(cat "$term_job/rc" 2>/dev/null || true)
if [ "$term_rc" -ne 143 ] || [ "$receipt" != 143 ]; then
  printf 'FAIL remote runner TERM receipt (process_rc=%s receipt=%s)\n' "$term_rc" "$receipt" >&2
  exit 1
fi
printf 'PASS remote runner writes truthful TERM receipt\n'

declared_job="$TMP/job-declared"
set +e
SUPERVISOR_MODE=declared SUPERVISOR_LEASE_MS=1000 SUPERVISOR_TERMINAL_GRACE_MS=100 \
  HOME="$TMP/home" SUPERVISOR_BIN="$ROOT/lib/command-supervisor.mjs" \
  bash "$ROOT/lib/remote-runner.sh" "$declared_job" "$TMP/mirror" . \
  bash -c 'printf "%s\n" "{\"seq\":1,\"type\":\"terminal\",\"lease_ms\":1000,\"rc\":0}" >&3; sleep 0.1'
declared_rc=$?
set -e
declared_receipt=$(cat "$declared_job/rc" 2>/dev/null || true)
if [ "$declared_rc" -ne 0 ] || [ "$declared_receipt" != 0 ]; then
  printf 'FAIL remote runner declared protocol (process_rc=%s receipt=%s)\n' "$declared_rc" "$declared_receipt" >&2
  exit 1
fi
printf 'PASS remote runner propagates declared supervisor mode\n'
