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

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
E2E_REMOTE="$ROOT/bin/e2e-remote"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
HOME_FIXTURE="$TMP/home"
mkdir -p "$HOME_FIXTURE/.claude/bin" "$TMP/shims"

cat >"$HOME_FIXTURE/.claude/build-remote.json" <<'JSON'
{"enabled":true,"local_fallback":true}
JSON
cat >"$HOME_FIXTURE/.claude/buildbox-hosts.json" <<'JSON'
{
  "schema_version": 1,
  "hosts": [
    {"name":"box1","ssh_alias":"box1","state":"reachable","machine_id":null,"roles":["builder","e2e"],"access":{"lan":null,"tailscale_ip":{"host":"100.64.0.1","port":22,"user":"user","identity_file":null},"tailscale_ssh":null},"rustdesk":null,"notes":"test fixture"},
    {"name":"box2","ssh_alias":"box2","state":"reachable","machine_id":null,"roles":["builder"],"access":{"lan":null,"tailscale_ip":{"host":"100.64.0.2","port":22,"user":"user","identity_file":null},"tailscale_ssh":null},"rustdesk":null,"notes":"test fixture"}
  ],
  "orders": {"build":["box1","box2"],"e2e":["box1"]}
}
JSON
cat >"$HOME_FIXTURE/.claude/bin/local-gate" <<'SH'
#!/usr/bin/env bash
cp "$BUILD_REMOTE_CONFIG" "$E2E_CAPTURE"
SH
chmod +x "$HOME_FIXTURE/.claude/bin/local-gate"

if HOME="$HOME_FIXTURE" E2E_CAPTURE="$TMP/config.json" "$E2E_REMOTE" --hosts box1 -- true >"$TMP/out" 2>"$TMP/err"; then
  echo "FAIL: differing e2e/build host sets must fail closed" >&2
  exit 1
fi
grep -q 'un-pinned dispatch' "$TMP/err" || {
  cat "$TMP/err" >&2
  echo "FAIL: host mismatch diagnostic missing" >&2
  exit 1
}

cat >"$HOME_FIXTURE/.claude/buildbox-hosts.json" <<'JSON'
{
  "schema_version": 1,
  "hosts": [
    {"name":"box1","ssh_alias":"box1","state":"reachable","machine_id":null,"roles":["builder","e2e"],"access":{"lan":null,"tailscale_ip":{"host":"100.64.0.1","port":22,"user":"user","identity_file":null},"tailscale_ssh":null},"rustdesk":null,"notes":"test fixture"}
  ],
  "orders": {"build":["box1"],"e2e":["box1"]}
}
JSON
cat >"$TMP/shims/node" <<'SH'
#!/usr/bin/env bash
if [[ " $* " == *" hosts --order build "* ]]; then
  echo "PATH node shim offloaded registry lookup" >&2
  exit 97
fi
exec /usr/bin/node "$@"
SH
chmod +x "$TMP/shims/node"

PATH="$TMP/shims:$PATH" HOME="$HOME_FIXTURE" E2E_CAPTURE="$TMP/config.json" "$E2E_REMOTE" -- true
node -e '
  const fs = require("node:fs");
  const config = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
  if ("hosts" in config) throw new Error("generated config contains obsolete hosts key");
  if (config.local_fallback !== false) throw new Error("generated config permits local fallback");
' "$TMP/config.json"

echo "e2e-remote config tests passed"
