#!/bin/bash
# 实战云教师节增强模型 · WorkBuddy 自动配置脚本
# 使用方法: bash setup.sh <你的API令牌>
# 令牌从实战云专属版后台「统一模型令牌」申请，一人一个

set -e

API_KEY="$1"
CONFIG_PATH="$HOME/.workbuddy/models.json"
BASE="https://llm.wozaixue.com/v1"

if [ -z "$API_KEY" ]; then
  echo "错误: 请提供API令牌"
  echo "使用方法: bash setup.sh <你的API令牌>"
  echo "令牌格式: sk-xxxxxx （从实战云专属版后台「统一模型令牌」获取）"
  exit 1
fi

if [[ ! "$API_KEY" == sk-* ]]; then
  echo "警告: 令牌格式不正确，应该以sk-开头，是否继续? (y/N)"
  read -r confirm
  if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
    exit 1
  fi
fi

echo "🔧 开始配置实战云教师节增强模型到WorkBuddy..."
echo "API地址: $BASE"
echo "API密钥: ${API_KEY:0:10}...${API_KEY: -6}"

# 备份现有配置
if [ -f "$CONFIG_PATH" ]; then
  BACKUP_PATH="$CONFIG_PATH.backup.$(date +%Y%m%d%H%M%S)"
  cp "$CONFIG_PATH" "$BACKUP_PATH"
  echo "📦 已备份现有配置到: $BACKUP_PATH"
fi

# 写入教师推荐模型
#
# **合并而不是覆盖**（2026-09-02 修）：原脚本这里是 `cat > "$CONFIG_PATH"`，
# 把整个 models.json 重写一遍 —— 老师自己配过的模型会被静默抹掉。备份是有的，
# 但绝大多数人不会知道要去恢复。SKILL.md 里写的本来就是「保留用户已有自定义
# 模型，不要整文件覆盖」，脚本没照做，这里对齐。
# 合并规则：同 id 的用本次的覆盖（换令牌要生效），其余原样保留，顺序不动。
NEW_MODELS=$(cat << EOF
[
  {
    "id": "deepseek-chat",
    "name": "实战云-DeepSeek(日常首选)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": false,
    "supportsReasoning": false,
    "useCustomProtocol": false
  },
  {
    "id": "deepseek-v4-pro",
    "name": "实战云-DeepSeek-V4-Pro(深度思考)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": false,
    "supportsReasoning": true,
    "useCustomProtocol": false
  },
  {
    "id": "glm-5.3",
    "name": "实战云-智谱GLM-5.3(中文写作)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": false,
    "supportsReasoning": true,
    "useCustomProtocol": false
  },
  {
    "id": "doubao-seed-2-0-mini-260215",
    "name": "实战云-豆包Seed-2.0-Mini(轻量快跑)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": false,
    "supportsReasoning": true,
    "useCustomProtocol": false
  },
  {
    "id": "gemini-3.5-flash-lite",
    "name": "实战云-Gemini(长文档1M)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": true,
    "supportsReasoning": false,
    "useCustomProtocol": false
  },
  {
    "id": "qwen3.8-max",
    "name": "实战云-通义千问3.8-Max(多面手)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": true,
    "supportsReasoning": true,
    "useCustomProtocol": false
  },
  {
    "id": "doubao-seed-2-1-pro-260628",
    "name": "实战云-豆包-Seed-2.1-Pro(课堂演示)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": true,
    "supportsReasoning": false,
    "useCustomProtocol": false
  },
  {
    "id": "kimi-k2.7-code-highspeed",
    "name": "实战云-Kimi-K2.7(编程实训)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": false,
    "supportsReasoning": true,
    "useCustomProtocol": false
  },
  {
    "id": "claude-sonnet-5",
    "name": "实战云-Claude-Sonnet-5(材料撰写)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": true,
    "supportsReasoning": false,
    "useCustomProtocol": false
  },
  {
    "id": "gpt-5.5",
    "name": "实战云-GPT-5.5(复杂分析)",
    "vendor": "Custom",
    "url": "$BASE",
    "apiKey": "$API_KEY",
    "supportsToolCall": true,
    "supportsImages": true,
    "supportsReasoning": true,
    "useCustomProtocol": false
  }
]
EOF
)

if command -v python3 >/dev/null 2>&1; then
  MERGED=$(NEW_MODELS="$NEW_MODELS" OLD_PATH="$CONFIG_PATH" python3 - << 'PYEOF'
import json, os, sys
new = json.loads(os.environ["NEW_MODELS"])
old = []
p = os.environ["OLD_PATH"]
if os.path.exists(p):
    try:
        with open(p, encoding="utf-8") as f:
            old = json.load(f)
        if not isinstance(old, list):
            old = []
    except Exception:
        # 原文件不是合法 JSON：不猜、不动它（备份已在上一步做好），
        # 直接当空处理并让用户知道，总比把坏文件的内容混进来强
        sys.stderr.write("提示: 原 models.json 解析失败，已按空配置处理（备份仍在）\n")
        old = []
ids = {m.get("id") for m in new}
merged = [m for m in old if m.get("id") not in ids] + new
print(json.dumps(merged, ensure_ascii=False, indent=2))
PYEOF
)
  printf '%s\n' "$MERGED" > "$CONFIG_PATH"
  KEPT=$(printf '%s' "$MERGED" | grep -c '"id"' || true)
  echo "🔗 已合并写入，配置里现在共有 $KEPT 个模型（你原有的自定义模型保留）"
else
  # 没有 python3 就不硬来：宁可不改，也不要把老师已有的配置洗掉
  echo "⚠️  未找到 python3，无法安全合并。请按 SKILL.md「方式2：手动配置」添加，"
  echo "    或安装 python3 后重跑本脚本。已保留你现有的配置，未做任何修改。"
  exit 1
fi

echo "✅ 配置完成！已添加10个教师增强模型"
echo "🔄 请重启WorkBuddy或刷新模型列表即可使用"
echo ""
echo "📝 注意事项:"
echo "1. 令牌不要泄露给他人，所有调用消耗你的额度"
echo "2. 禁止上传学生姓名、学号等敏感信息，学情分析先脱敏"
echo "3. 模型输出必须人工复核后再用于教学材料"
echo "4. 高频批改用 deepseek-chat / doubao-seed-2-0-mini-260215，成本更低"
