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

# Signal AI Gateway — Claude Code 一键接入
# 用法: curl -fsSL <portal>/docs/scripts/claude-code.sh | GATEWAY_BASE_URL='https://...' bash -s -- sk-...
# 可选: GATEWAY_CLAUDE_SONNET_MODEL / OPUS / HAIKU / OR_MODEL=openrouter-free

API_KEY="${1:-}"
GATEWAY_BASE="${GATEWAY_BASE_URL:-https://api.4stoken.cn}"
SONNET_MODEL="${GATEWAY_CLAUDE_SONNET_MODEL:-claude-sonnet-4-6}"
OPUS_MODEL="${GATEWAY_CLAUDE_OPUS_MODEL:-claude-opus-4-8}"
HAIKU_MODEL="${GATEWAY_CLAUDE_HAIKU_MODEL:-claude-haiku-4-5-20251001}"
OR_MODEL="${GATEWAY_CLAUDE_OR_MODEL:-openrouter-free}"
SETTINGS_DIR="$HOME/.claude"
SETTINGS_FILE="$SETTINGS_DIR/settings.json"
PROFILE_DIR="$SETTINGS_DIR/gateway-profiles"
OR_PROFILE_FILE="$PROFILE_DIR/openrouter-free.json"

if [ -z "$API_KEY" ]; then
  printf '\033[1;31m错误：\033[0m请提供 Client Key\n'
  printf '用法: ... | bash -s -- sk-YOUR_KEY\n'
  exit 1
fi

mkdir -p "$SETTINGS_DIR" "$PROFILE_DIR"

if [ -f "$SETTINGS_FILE" ]; then
  cp "$SETTINGS_FILE" "$SETTINGS_FILE.bak.$(date +%s)"
  printf '\033[0;36m已备份\033[0m %s\n' "$SETTINGS_FILE"
fi

write_claude_json() {
  local target="$1"
  local model="$2"
  python3 -c "
import json, os
path = '''$target'''
model = '''$model'''
data = {}
if os.path.isfile(path):
    with open(path) as f:
        data = json.load(f)
env = data.setdefault('env', {})
env['ANTHROPIC_BASE_URL'] = '$GATEWAY_BASE'
env['ANTHROPIC_AUTH_TOKEN'] = '$API_KEY'
env['ANTHROPIC_DEFAULT_SONNET_MODEL'] = '$SONNET_MODEL'
env['ANTHROPIC_DEFAULT_OPUS_MODEL'] = '$OPUS_MODEL'
env['ANTHROPIC_DEFAULT_HAIKU_MODEL'] = '$HAIKU_MODEL'
env['ANTHROPIC_DEFAULT_SONNET_MODEL_NAME'] = 'Claude Sonnet 4.6'
env['ANTHROPIC_DEFAULT_OPUS_MODEL_NAME'] = 'Claude Opus 4.8'
env['ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME'] = 'Claude Haiku 4.5'
env['GATEWAY_OPENROUTER_FREE_MODEL'] = '$OR_MODEL'
data['model'] = model
with open(path, 'w') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
"
}

if command -v python3 &>/dev/null; then
  write_claude_json "$SETTINGS_FILE" "$SONNET_MODEL"
  write_claude_json "$OR_PROFILE_FILE" "$OR_MODEL"
else
  cat > "$SETTINGS_FILE" <<EOF
{
  "model": "$SONNET_MODEL",
  "env": {
    "ANTHROPIC_BASE_URL": "$GATEWAY_BASE",
    "ANTHROPIC_AUTH_TOKEN": "$API_KEY",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "$SONNET_MODEL",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "$OPUS_MODEL",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "$HAIKU_MODEL",
    "GATEWAY_OPENROUTER_FREE_MODEL": "$OR_MODEL"
  }
}
EOF
  cp "$SETTINGS_FILE" "$OR_PROFILE_FILE"
  python3 -c "import json; d=json.load(open('$OR_PROFILE_FILE')); d['model']='$OR_MODEL'; json.dump(d, open('$OR_PROFILE_FILE','w'), indent=2)" 2>/dev/null || true
fi

printf '\n\033[1;32m✓ Claude Code 配置完成\033[0m\n'
printf '  配置文件: %s\n' "$SETTINGS_FILE"
printf '  OpenRouter profile: %s\n' "$OR_PROFILE_FILE"
printf '  Base URL: %s\n' "$GATEWAY_BASE"
printf '  默认模型: sonnet=%s  opus=%s  haiku=%s\n' "$SONNET_MODEL" "$OPUS_MODEL" "$HAIKU_MODEL"
printf '  OpenRouter: model=%s\n' "$OR_MODEL"
printf '  切换 OpenRouter:\n'
printf '    • 会话内 \033[1m/model %s\033[0m\n' "$OR_MODEL"
printf '    • 或 \033[1mcp %s settings.json\033[0m 后重启 claude\n' "$OR_PROFILE_FILE"
printf '    • 或 \033[1mGATEWAY_CLAUDE_OR_MODEL=%s\033[0m 重装脚本\n' "$OR_MODEL"
printf '\n  \033[1;33m请完全退出 claude 后重新打开\033[0m，再 /status 应显示 %s\n' "$SONNET_MODEL"
