#!/usr/bin/env bash
# Local helper wrapper. Published npm bin is dist/runtime-entry.js (sole-Rust).
# Prefer pure-Rust native binary; do not invoke a TypeScript PDF runtime.
set -euo pipefail

ROOT="$(cd "$(dirname "$0")/.." && pwd)"

if [[ -f "$ROOT/dist/runtime-entry.js" ]]; then
  exec node "$ROOT/dist/runtime-entry.js" "$@"
fi

map_platform_id() {
  local sys arch
  sys="$(uname -s | tr '[:upper:]' '[:lower:]')"
  arch="$(uname -m)"
  case "${sys}-${arch}" in
    darwin-arm64|darwin-aarch64) printf 'darwin-arm64\n' ;;
    darwin-x86_64|darwin-amd64) printf 'darwin-x64\n' ;;
    linux-aarch64|linux-arm64) printf 'linux-arm64-gnu\n' ;;
    linux-x86_64|linux-amd64) printf 'linux-x64-gnu\n' ;;
    mingw*|msys*|cygwin*)
      case "${arch}" in
        x86_64|amd64) printf 'win32-x64-msvc\n' ;;
        *) return 1 ;;
      esac
      ;;
    *) return 1 ;;
  esac
}

# Brand env override: CITRA_RUST_BIN only.
if [[ -n "${CITRA_RUST_BIN:-}" && -x "${CITRA_RUST_BIN}" ]]; then
  exec "${CITRA_RUST_BIN}" "$@"
fi

PLATFORM_ID="$(map_platform_id || true)"
if [[ -n "${PLATFORM_ID}" ]]; then
  for CANDIDATE in \
    "$ROOT/bin/native/${PLATFORM_ID}/citra-mcp-server" \
    "$ROOT/bin/native/${PLATFORM_ID}/citra-mcp-server.exe" \
    "$ROOT/packages/citra-${PLATFORM_ID}/bin/citra-mcp-server" \
    "$ROOT/packages/citra-${PLATFORM_ID}/bin/citra-mcp-server.exe"
  do
    if [[ -x "${CANDIDATE}" ]]; then
      exec "${CANDIDATE}" "$@"
    fi
  done
fi

for CANDIDATE in \
  "$ROOT/bin/native/citra-mcp-server" \
  "$ROOT/bin/native/citra-mcp-server.exe" \
  "$ROOT/target/release/citra-mcp-server" \
  "$ROOT/target/release/citra-mcp-server.exe" \
  "$ROOT/target/debug/citra-mcp-server" \
  "$ROOT/target/debug/citra-mcp-server.exe"
do
  if [[ -x "${CANDIDATE}" ]]; then
    exec "${CANDIDATE}" "$@"
  fi
done

echo "[citra] sole-Rust binary not found. Build with: bun run build:rust" >&2
echo "[citra] Or install the matching optional native package (@sylphx/citra-<platform>)." >&2
exit 1
