#!/usr/bin/env node
const { execFileSync } = require("child_process");
const {
  assertExecutable,
  formatNonExecutableBinaryMessage,
} = require("@sandbox-agent/cli-shared");
const fs = require("fs");
const path = require("path");

const TRUST_PACKAGES =
  "@sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64";

function formatHint(binPath) {
  return formatNonExecutableBinaryMessage({
    binPath,
    trustPackages: TRUST_PACKAGES,
    bunInstallBlocks: [
      {
        label: "Project install",
        commands: [
          `bun pm trust ${TRUST_PACKAGES}`,
          "bun add @sandbox-agent/cli",
        ],
      },
      {
        label: "Global install",
        commands: [
          `bun pm -g trust ${TRUST_PACKAGES}`,
          "bun add -g @sandbox-agent/cli",
        ],
      },
    ],
  });
}

const PLATFORMS = {
  "darwin-arm64": "@sandbox-agent/cli-darwin-arm64",
  "darwin-x64": "@sandbox-agent/cli-darwin-x64",
  "linux-x64": "@sandbox-agent/cli-linux-x64",
  "linux-arm64": "@sandbox-agent/cli-linux-arm64",
  "win32-x64": "@sandbox-agent/cli-win32-x64",
};

const key = `${process.platform}-${process.arch}`;
const pkg = PLATFORMS[key];
if (!pkg) {
  console.error(`Unsupported platform: ${key}`);
  process.exit(1);
}

try {
  const pkgPath = require.resolve(`${pkg}/package.json`);
  const bin = process.platform === "win32" ? "sandbox-agent.exe" : "sandbox-agent";
  const binPath = path.join(path.dirname(pkgPath), "bin", bin);

  if (!assertExecutable(binPath, fs)) {
    console.error(formatHint(binPath));
    process.exit(1);
  }

  execFileSync(binPath, process.argv.slice(2), { stdio: "inherit" });
} catch (e) {
  if (e.status !== undefined) process.exit(e.status);
  throw e;
}
