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

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
STAGE="$ROOT/packaging/stage-backend-release.sh"
TESTROOT="${XDG_CACHE_HOME:-$HOME/.cache}/overdeck/tests/collector-release-runtime-deps/run-$$-$RANDOM"
RELEASE="$TESTROOT/release"
trap 'rm -rf "$TESTROOT"' EXIT

mkdir -p "$RELEASE/collector/src" "$RELEASE/modules/workstation/claude/lib"
cp "$ROOT/collector/src/buildbox-registry.ts" "$RELEASE/collector/src/buildbox-registry.ts"
cp "$ROOT/modules/workstation/claude/lib/buildbox-registry.mjs" "$RELEASE/modules/workstation/claude/lib/buildbox-registry.mjs"

cat >"$TESTROOT/buildbox-hosts.json" <<'JSON'
{
  "schema_version": 1,
  "hosts": [
    {
      "name": "debian1",
      "ssh_alias": "debian1",
      "state": "reachable",
      "machine_id": "66b9bc7fcc6c43d0b08ecff18fa633de",
      "roles": ["builder"],
      "access": {
        "lan": null,
        "tailscale_ip": {"host": "100.106.253.50", "port": 2222, "user": "user", "identity_file": null},
        "tailscale_ssh": {"host": "debian1.taild2daa0.ts.net", "port": 22, "user": "user", "identity_file": null}
      },
      "rustdesk": null,
      "notes": "collector release runtime dependency fixture"
    }
  ],
  "orders": {"build": ["debian1"]}
}
JSON

BUILDBOX_HOSTS_CONFIG="$TESTROOT/buildbox-hosts.json" bun -e '
  const mod = await import(process.argv[1]);
  const registry = await mod.loadBuildboxRegistry(process.env);
  if (registry.hosts.length !== 1 || registry.hosts[0].name !== "debian1") process.exit(1);
' "$RELEASE/collector/src/buildbox-registry.ts"

grep -Fq 'modules/workstation/claude/lib/buildbox-registry.mjs' "$STAGE"
grep -Fq 'for runtime_path in' "$STAGE"

rm "$RELEASE/modules/workstation/claude/lib/buildbox-registry.mjs"
if BUILDBOX_HOSTS_CONFIG="$TESTROOT/buildbox-hosts.json" bun -e '
  const mod = await import(process.argv[1]);
  try {
    await mod.loadBuildboxRegistry(process.env);
  } catch (error) {
    if (String(error).includes("cannot load the registry reader")) process.exit(0);
  }
  process.exit(1);
' "$RELEASE/collector/src/buildbox-registry.ts"; then
  :
else
  printf 'collector release did not fail closed when registry reader was absent\n' >&2
  exit 1
fi

printf 'collector-release-runtime-deps: ok\n'
