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

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
export CALLER_DIR="${CALLER_DIR:-$(pwd -W 2>/dev/null || pwd)}"

# ── 首次部署：将默认 bingo 配置复制到 ~/.claude/bingo/ ──
_BINGO_CONFIG_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
_BINGO_DIR="$_BINGO_CONFIG_DIR/bingo"
_BINGO_TARGET="$_BINGO_DIR/settings.json"
_BINGO_SRC="$ROOT_DIR/config/bingo-defaults/settings.json"

if [ ! -f "$_BINGO_TARGET" ] && [ -f "$_BINGO_SRC" ]; then
  mkdir -p "$_BINGO_DIR"
  cp "$_BINGO_SRC" "$_BINGO_TARGET" 2>/dev/null && \
    echo "[bingo] 首次启动：已部署默认配置到 $_BINGO_TARGET" || true
fi

cd "$ROOT_DIR"

# ── bun 检测与自动安装 ──
if ! command -v bun &>/dev/null && [[ ! -x "$HOME/.bun/bin/bun" ]]; then
  echo "[bingocode] bun 未检测到，正在通过 npm 安装..."
  _TMP_DIR="$(mktemp -d)"
  _ARCH="$(uname -m)"
  if [[ "$_ARCH" == "aarch64" || "$_ARCH" == "arm64" ]]; then
    _BUN_PKG="@oven/bun-linux-aarch64"
  else
    _BUN_PKG="@oven/bun-linux-x64"
  fi

  if npm install "$_BUN_PKG" --prefix "$_TMP_DIR" --no-save --loglevel error; then
    _BUN_SRC="$_TMP_DIR/node_modules/$_BUN_PKG/bin/bun"
    if [[ -f "$_BUN_SRC" ]]; then
      mkdir -p "$HOME/.bun/bin"
      cp "$_BUN_SRC" "$HOME/.bun/bin/bun"
      chmod +x "$HOME/.bun/bin/bun"
      export PATH="$HOME/.bun/bin:$PATH"
      echo "[bingocode] bun 安装完成，正在启动..."
    else
      echo "[bingocode] 安装失败：未找到 $_BUN_SRC" >&2
      rm -rf "$_TMP_DIR"
      exit 1
    fi
  else
    echo "[bingocode] npm install $_BUN_PKG 失败，请手动安装 bun: https://bun.sh" >&2
    rm -rf "$_TMP_DIR"
    exit 1
  fi
  rm -rf "$_TMP_DIR"
fi

BUN_BIN="$(command -v bun 2>/dev/null || echo "$HOME/.bun/bin/bun")"

if [[ -f .env ]]; then
  ENV_FILE_FLAG="--env-file=.env"
else
  ENV_FILE_FLAG=""
fi

exec "$BUN_BIN" --preload ./preload.ts $ENV_FILE_FLAG ./src/entrypoints/manager.tsx "$@"
