#!/usr/bin/env bash
# buildbox-watch must resolve the local fleet registry without entering PATH node/cpu-guard routing.
set -uo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WATCH="$SCRIPT_DIR/../bin/buildbox-watch.sh"
mkdir -p "${XDG_CACHE_HOME:-$HOME/.cache}/overdeck/tests"
ROOT="$(mktemp -d "${XDG_CACHE_HOME:-$HOME/.cache}/overdeck/tests/buildbox-watch.XXXXXX")"
trap 'rm -rf "$ROOT"' EXIT
mkdir -p "$ROOT/home/.claude/run" "$ROOT/bin"

cat >"$ROOT/bin/node" <<'EOF'
#!/usr/bin/env bash
echo 'PATH node must not be used' >&2
exit 91
EOF
cat >"$ROOT/bin/ssh" <<'EOF'
#!/usr/bin/env bash
exit 0
EOF
cat >"$ROOT/bin/gh" <<'EOF'
#!/usr/bin/env bash
exit 1
EOF
chmod +x "$ROOT/bin/"*

cat >"$ROOT/registry.json" <<'EOF'
{
  "schema_version": 1,
  "hosts": [
    {
      "name": "box-a",
      "ssh_alias": "box-a",
      "state": "reachable",
      "machine_id": null,
      "roles": ["builder"],
      "access": {
        "lan": null,
        "tailscale_ip": {"host":"100.64.0.10","port":2222,"user":"user","identity_file":"~/.ssh/test-buildbox"},
        "tailscale_ssh": {"host":"box-a.example.ts.net","port":22,"user":"user","identity_file":null}
      },
      "rustdesk": null,
      "notes": "fixture"
    }
  ],
  "orders": {"build":["box-a"]}
}
EOF

OUT="$ROOT/out"
if env \
  HOME="$ROOT/home" \
  PATH="$ROOT/bin:$PATH" \
  BUILDBOX_HOSTS_CONFIG="$ROOT/registry.json" \
  BUILDBOX_WATCH_NODE_BIN=/usr/bin/node \
  BB_REPO=invalid/invalid \
  bash "$WATCH" >"$OUT" 2>&1; then
  :
else
  cat "$OUT" >&2
  exit 1
fi

if grep -q 'PATH node must not be used\|remote-only dispatch failed\|buildbox registry unusable' "$OUT"; then
  cat "$OUT" >&2
  exit 1
fi

test -s "$ROOT/home/.claude/run/buildbox-watch/state.json"
printf 'buildbox-watch-local-registry: ok\n'
