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

# Prefer a UTF-8 locale for bilingual prompts; avoid forcing LC_ALL on unusual systems.
if [ -z "${LANG:-}" ] || ! printf '%s' "${LANG:-}" | grep -qi 'utf-8\|utf8'; then
  export LANG="en_US.UTF-8"
fi
if [ -n "${LC_ALL:-}" ] && ! printf '%s' "$LC_ALL" | grep -qi 'utf-8\|utf8'; then
  unset LC_ALL
fi

JIMU_STEP="startup / 启动"
fail() {
  echo
  echo "[ERROR] Step failed: $JIMU_STEP"
  echo "[错误] 当前步骤失败：$JIMU_STEP"
echo "Please fix the failed step above, then run this script again. Do not skip a failed step."
echo "请先修复上方失败步骤的问题，再重新运行脚本。不要跳过失败步骤继续下一步。"
  echo "Manual guide / 手动说明: https://code.jimuxyz.com/dashboard/opencode-installation/macos-linux"
  exit 1
}
trap fail ERR

trim() {
  printf '%s' "$1" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
}

check_node_npm() {
  required_node=18
  missing=0
  if ! command -v node >/dev/null 2>&1; then
    echo "[ERROR] Node.js not found. Please install Node.js ${required_node}+."
    echo "        未检测到 Node.js，请先安装 Node.js ${required_node}+。"
    missing=1
  else
    node_version="$(node -v | sed 's/^v//')"
    node_major="${node_version%%.*}"
    echo "Node.js: v${node_version}"
    if [ "${node_major:-0}" -lt "$required_node" ]; then
      echo "[ERROR] Node.js version is too old. Need ${required_node}+."
      echo "        Node.js 版本过低，需要 ${required_node}+。"
      missing=1
    fi
  fi

  if ! command -v npm >/dev/null 2>&1; then
    echo "[ERROR] npm not found. Please reinstall Node.js."
    echo "        未检测到 npm，请重新安装 Node.js。"
    missing=1
  else
    echo "npm: v$(npm -v)"
  fi

  if [ "$missing" -ne 0 ]; then
    echo
    echo "[ERROR] Environment check failed. Fix the items above and run again."
    echo "        环境检测失败，请先修复上面的问题后再重试。"
    exit 1
  fi

  echo "[OK] Environment check passed."
  echo "     环境检测通过。"
}

read_key() {
  label="$1"
  READ_KEY_VALUE=""
  echo
  read -r -p "Paste your ${label} API Key (sk-...) and press Enter / 粘贴你的 ${label} API Key 后按回车: " READ_KEY_VALUE
  READ_KEY_VALUE="$(trim "$READ_KEY_VALUE")"
  if [ -z "$READ_KEY_VALUE" ]; then
    echo "[ERROR] API Key is required. / 请填写 API Key。"
    exit 1
  fi
  case "$READ_KEY_VALUE" in
    sk-*) ;;
    *)
      echo "[ERROR] Invalid API Key. It must start with sk-."
      echo "[错误] Key 格式不对，必须以 sk- 开头。请确认你已经把占位符换成自己的真实 Key。"
      exit 1
      ;;
  esac
}

choose_products() {
  PRODUCT_CHOICE=""
  NEED_CODEX=0
  NEED_CLAUDE=0
  NEED_GEMINI=0
  echo
  echo "Choose product lines / 请选择要写入的产品线组合："
  echo "1. Codex"
  echo "2. Claude Code"
  echo "3. Gemini"
  echo "4. Codex + Claude Code"
  echo "5. Codex + Gemini"
  echo "6. Claude Code + Gemini"
  echo "7. All / 全部"
  read -r -p "Enter 1-7 / 输入 1-7: " PRODUCT_CHOICE
  case "$PRODUCT_CHOICE" in
    1) NEED_CODEX=1 ;;
    2) NEED_CLAUDE=1 ;;
    3) NEED_GEMINI=1 ;;
    4) NEED_CODEX=1; NEED_CLAUDE=1 ;;
    5) NEED_CODEX=1; NEED_GEMINI=1 ;;
    6) NEED_CLAUDE=1; NEED_GEMINI=1 ;;
    7) NEED_CODEX=1; NEED_CLAUDE=1; NEED_GEMINI=1 ;;
    *) echo "[ERROR] Invalid choice. / 选择无效。"; exit 1 ;;
  esac
}

echo "=========================================="
echo "  JimuAI OpenCode Setup (macOS/Linux)"
echo "=========================================="
echo
echo "This script will / 此脚本将执行："
echo "1. Check Node.js / npm / 检查 Node.js / npm"
echo "2. Install OpenCode / 安装 OpenCode"
echo "3. Choose product lines and write config / 选择产品线并写入配置"
echo

JIMU_STEP="1/3 Check Node.js / npm / 检查环境"
echo "[1/3] Checking environment... / 正在检查环境..."
check_node_npm

JIMU_STEP="2/3 Install OpenCode / 安装 OpenCode"
echo "[2/3] Installing OpenCode... / 正在安装 OpenCode..."
npm install -g opencode-ai --registry=https://registry.npmmirror.com

JIMU_STEP="3/3 API Key input / 输入 API Key"
CODEX_KEY=""
CLAUDE_KEY=""
GEMINI_KEY=""
choose_products
if [ "$NEED_CODEX" = "1" ]; then
  read_key 'Codex'
  CODEX_KEY="$READ_KEY_VALUE"
fi
if [ "$NEED_CLAUDE" = "1" ]; then
  read_key 'Claude Code'
  CLAUDE_KEY="$READ_KEY_VALUE"
fi
if [ "$NEED_GEMINI" = "1" ]; then
  read_key 'Gemini'
  GEMINI_KEY="$READ_KEY_VALUE"
fi

JIMU_STEP="3/3 Write OpenCode config / 写入 OpenCode 配置"
echo
echo "[3/3] Writing OpenCode config... / 正在写入 OpenCode 配置..."
JIMUXYZ_CODEX_KEY="$CODEX_KEY" JIMUXYZ_CLAUDE_KEY="$CLAUDE_KEY" JIMUXYZ_GEMINI_KEY="$GEMINI_KEY" \
  bash <(curl -fsSL https://code.jimuxyz.com/env_deploy/opencode-deploy.sh)

trap - ERR
echo
echo "=========================================="
echo "Setup finished. / 安装配置完成。"
echo "Open a new terminal and run: opencode / 重新打开终端后运行：opencode"
echo "=========================================="
