#!/bin/bash
source ~/.zshenv 2>/dev/null
PROVIDER=$(echo "$1" | tr '[:upper:]' '[:lower:]')
MODEL_SET="$2"
CLAUDE_DIR="$HOME/.claude"
SETTINGS_FILE="$CLAUDE_DIR/settings.json"
CLAUDE_USE_DIR="$HOME/.config/system-use/tools/claude-use"
OR_MODELS_FILE="$CLAUDE_USE_DIR/or_models.yaml"

if [ "$PROVIDER" = "or" ]; then
  PROVIDER="openrouter"
fi

cd "$CLAUDE_DIR"

show_help() {
  echo "用法: claude-switch <provider> [model-set]"
  echo ""
  echo "Providers:"
  echo "  claude          Claude (Anthropic)"
  echo "  minimax         MiniMax"
  echo "  glm             Zhipu GLM"
  echo "  openrouter(or)  OpenRouter (可选指定 model-set)"
  echo ""
  echo "OpenRouter model-sets:"
  echo "  or             default (anthropic 模型组)"
  echo "  or claude      claude-opus-4.7 / claude-sonnet-4.6 / claude-haiku-4.5"
  echo "  or gpt         gpt-5.4 / kimi-k2.6 / qwen3.6-plus"
  echo "  or kimi        kimi-k2.6 / kimi-k2.6 / qwen3.6-plus"
  echo ""
  echo "示例:"
  echo "  claude-switch claude"
  echo "  claude-switch minimax"
  echo "  claude-switch glm"
  echo "  claude-switch or"
  echo "  claude-switch or gpt"
  echo "  claude-switch or kimi"
}

if [ -z "$PROVIDER" ] || [ "$PROVIDER" = "-h" ] || [ "$PROVIDER" = "--help" ]; then
  show_help
  exit 0
fi

if [ "$PROVIDER" = "minimax" ] || [ "$PROVIDER" = "claude" ] || [ "$PROVIDER" = "glm" ] || [ "$PROVIDER" = "openrouter" ]; then
  PROVIDER="$PROVIDER" MODEL_SET="$MODEL_SET" python3 << 'EOF'
import json, os, sys

provider = os.environ["PROVIDER"]
model_set = os.environ.get("MODEL_SET", "")
file_path = os.path.expanduser("~/.claude/settings.json")
claude_use_dir = os.path.expanduser("~/.config/system-use/tools/claude-use")
or_models_file = os.path.join(claude_use_dir, "or_models.yaml")

with open(file_path, 'r') as f:
    data = json.load(f)

for key in [
    "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_BASE_URL",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL", "ANTHROPIC_DEFAULT_OPUS_MODEL",
    "ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_MODEL",
    "ANTHROPIC_API_KEY"
]:
    data["env"].pop(key, None)

if provider == "openrouter":
    data["env"]["ANTHROPIC_AUTH_TOKEN"] = os.environ["OPENROUTER_API_KEY"]
    data["env"]["ANTHROPIC_BASE_URL"] = "https://openrouter.ai/api"
    data["env"]["ANTHROPIC_API_KEY"] = ""

    if model_set:
        try:
            import yaml
            with open(or_models_file, 'r') as f:
                config = yaml.safe_load(f)
        except ImportError:
            import re
            with open(or_models_file, 'r') as f:
                content = f.read()
            config = {}
            for block in content.strip().split('\n\n'):
                lines = block.strip().split('\n')
                if not lines:
                    continue
                name = lines[0].rstrip(':')
                config[name] = {}
                for line in lines[1:]:
                    if ':' in line:
                        k, v = line.split(':', 1)
                        config[name][k.strip()] = v.strip()

        if model_set not in config:
            print(f"错误: 未知的 model-set '{model_set}'，可用值: {', '.join(config.keys())}")
            sys.exit(1)

        ms = config[model_set]
        data["env"]["ANTHROPIC_DEFAULT_OPUS_MODEL"] = ms["opus"]
        data["env"]["ANTHROPIC_DEFAULT_SONNET_MODEL"] = ms["sonnet"]
        data["env"]["ANTHROPIC_DEFAULT_HAIKU_MODEL"] = ms["haiku"]
        data["model"] = ms["model"]
    else:
        data["env"]["ANTHROPIC_DEFAULT_HAIKU_MODEL"] = "anthropic/claude-haiku-4.5"
        data["env"]["ANTHROPIC_DEFAULT_OPUS_MODEL"] = "anthropic/claude-opus-4.7"
        data["env"]["ANTHROPIC_DEFAULT_SONNET_MODEL"] = "anthropic/claude-sonnet-4.6"
        data["model"] = "anthropic/claude-opus-4.7"
elif provider == "minimax":
    data["env"]["ANTHROPIC_AUTH_TOKEN"] = os.environ["MINIMAX_API_KEY"]
    data["env"]["ANTHROPIC_BASE_URL"] = "https://api.minimaxi.com/anthropic"
    data["env"]["ANTHROPIC_DEFAULT_HAIKU_MODEL"] = "MiniMax-M2.5-highspeed"
    data["env"]["ANTHROPIC_DEFAULT_OPUS_MODEL"] = "MiniMax-M2.7-highspeed"
    data["env"]["ANTHROPIC_DEFAULT_SONNET_MODEL"] = "MiniMax-M2.7-highspeed"
    data["env"]["ANTHROPIC_MODEL"] = "MiniMax-M2.7-highspeed"
    data["model"] = "MiniMax-M2.7-highspeed"
elif provider == "glm":
    data["env"]["ANTHROPIC_AUTH_TOKEN"] = os.environ["ZHIPU_API_KEY"]
    data["env"]["ANTHROPIC_BASE_URL"] = "https://open.bigmodel.cn/api/anthropic"
    data["env"]["ANTHROPIC_DEFAULT_HAIKU_MODEL"] = "glm-5-turbo"
    data["env"]["ANTHROPIC_DEFAULT_OPUS_MODEL"] = "glm-5.1"
    data["env"]["ANTHROPIC_DEFAULT_SONNET_MODEL"] = "glm-5-turbo"
    data["env"]["ANTHROPIC_MODEL"] = "glm-5.1"
    data["model"] = "glm-5.1"
elif provider == "claude":
    data["model"] = "opus"

if provider == "openrouter":
    statusline_cmd = os.path.join(claude_use_dir, "openrouter/statusline.sh")
else:
    statusline_cmd = os.path.join(claude_use_dir, "claude-hud/claude-hud-statusline.sh")
data["statusLine"] = {"type": "command", "command": statusline_cmd}

with open(file_path, 'w') as f:
    json.dump(data, f, indent=2)
    f.write('\n')
EOF

  if [ $? -eq 0 ]; then
    case "$PROVIDER" in
      minimax)    label="MiniMax" ;;
      claude)     label="Claude" ;;
      glm)        label="GLM" ;;
      openrouter)
        if [ -n "$MODEL_SET" ]; then
          label="OpenRouter (model-set: $MODEL_SET)"
        else
          label="OpenRouter (默认)"
        fi
        ;;
    esac
    echo "已切换到 provider: $label"
  fi
else
  show_help
  exit 1
fi
