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

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
E2E_REMOTE_SOURCE="$ROOT/bin/e2e-remote"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
HOME_FIXTURE="$TMP/home"
DEPLOY_FIXTURE="$TMP/deploy/modules/workstation/claude"
mkdir -p "$HOME_FIXTURE/.claude/bin" "$TMP/shims" "$DEPLOY_FIXTURE/bin" "$DEPLOY_FIXTURE/lib"
cp "$E2E_REMOTE_SOURCE" "$DEPLOY_FIXTURE/bin/e2e-remote"
cp "$ROOT/lib/buildbox-registry.mjs" "$DEPLOY_FIXTURE/lib/buildbox-registry.mjs"
cp "$ROOT/lib/e2e-pair.sh" "$DEPLOY_FIXTURE/lib/e2e-pair.sh"
cp "$ROOT/lib/seat-attest.sh" "$DEPLOY_FIXTURE/lib/seat-attest.sh"
E2E_REMOTE="$DEPLOY_FIXTURE/bin/e2e-remote"

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
case " $* " in
  *" --remote-only "*) ;;
  *) echo "missing --remote-only" >&2; exit 91 ;;
esac
payload_command="${@: -2:1}"
case "$payload_command" in
  /home/user/.claude/bin/e2e-remote-payload) ;;
  *) echo "payload command is not installed remote runner: $payload_command" >&2; exit 92 ;;
esac
cp "$BUILD_REMOTE_CONFIG" "$E2E_CAPTURE"
SH
chmod +x "$HOME_FIXTURE/.claude/bin/local-gate"

HOME="$HOME_FIXTURE" DEPLOY_FIXTURE_PATH="$DEPLOY_FIXTURE" E2E_CAPTURE="$TMP/config.json" "$E2E_REMOTE" --hosts box1 -- true

if HOME="$HOME_FIXTURE" DEPLOY_FIXTURE_PATH="$DEPLOY_FIXTURE" E2E_CAPTURE="$TMP/config.json" "$E2E_REMOTE" -- true >"$TMP/out" 2>"$TMP/err"; then
  echo "FAIL: default 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: default host mismatch diagnostic missing" >&2
  exit 1
}

if HOME="$HOME_FIXTURE" DEPLOY_FIXTURE_PATH="$DEPLOY_FIXTURE" E2E_CAPTURE="$TMP/config.json" "$E2E_REMOTE" --hosts missing -- true >"$TMP/out" 2>"$TMP/err"; then
  echo "FAIL: registry-rejected explicit host must fail closed" >&2
  exit 1
fi
grep -q -- '--hosts rejected by the buildbox registry' "$TMP/err" || {
  cat "$TMP/err" >&2
  echo "FAIL: registry rejection 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" DEPLOY_FIXTURE_PATH="$DEPLOY_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");
  if (JSON.stringify(config.dispatch_hosts) !== JSON.stringify(["box1"])) {
    throw new Error(`generated config does not pin dispatch hosts: ${JSON.stringify(config.dispatch_hosts)}`);
  }
' "$TMP/config.json"

echo "e2e-remote config tests passed"
