/**
 * 厂商预设数据(项 D:文档探索失败时兜底 + 配置体验)。
 *
 * 选中预设后表单自动填入 providerType / baseUrl / defaultModel;用户仍可手改覆盖。
 * "自定义" 不预填(纯手填)。endpoints 均来自官方文档/WebSearch 核验,非猜测:
 *
 * - GLM/智谱     openai_compat  https://open.bigmodel.cn/api/paas/v4              (model_fetch_helpers.rs:178,实测端点)
 * - DeepSeek     openai_compat  https://api.deepseek.com                          (openai_compat.rs:45)
 * - SenseNova    openai_compat  https://token.sensenova.cn/v1                     (官方 token plan 端点;db 用户实测可用;来源见下方 SenseNova 注释)
 * - 通义千问     openai_compat  https://dashscope.aliyuncs.com/compatible-mode/v1 (阿里云百炼 DashScope;https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope)
 * - 月之暗面 Kimi openai_compat  https://api.moonshot.cn/v1                         (Moonshot AI;https://platform.moonshot.cn/docs)
 * - 百度文心     openai_compat  https://qianfan.baidubce.com/v2                   (百度千帆 ModelBuilder v2;https://ai.baidu.com/ai-doc/WENXINWORKSHOP/2m3fihw8s)
 * - 讯飞星火     openai_compat  https://spark-api-open.xf-yun.com/v1              (讯飞开放平台 OpenAI 兼容;https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html)
 * - 字节豆包     openai_compat  https://ark.cn-beijing.volces.com/api/v3          (火山方舟 Ark;https://www.volcengine.com/docs/82379/1330626)
 * - Google Gemini openai_compat https://generativelanguage.googleapis.com/v1beta/openai (Google AI for Developers;https://ai.google.dev/gemini-api/docs/openai)
 * - OpenAI      openai_compat  https://api.openai.com                            (openai_compat.rs:45)
 * - Anthropic   anthropic      https://api.anthropic.com                         (anthropic_compat.rs:51)
 *
 * chat_url/messages_url 智能拼接(见 openai_compat.rs chat_url / anthropic_compat.rs messages_url):
 * - 仅域名(OpenAI/DeepSeek)→ 后端补 /v1/chat/completions
 * - 已含版本段 GLM /v4、SenseNova /v1、千帆 /v2 等 → 后端补 /chat/completions
 * 故 baseUrl 既可填带 /v1 也可不填,均能工作;此处采用各厂商官方文档示例形态(更接近用户预期)。
 */

/** providerType 字面量(对齐后端 ProviderType serde,与 ProviderPanel.vue 下拉 option value 一致) */
export type PresetProviderType = 'openai_compat' | 'anthropic'

export interface ProviderPreset {
  /** 预设唯一标识(下拉 option value;__custom 为内置"自定义"项) */
  id: string
  /** 展示名(中英 i18n key 后缀,见 labelPreset.{id}) */
  name: string
  providerType: PresetProviderType
  baseUrl: string
  defaultModel: string
}

/**
 * 预设列表(顺序即下拉展示顺序;高频国产厂商前置)。
 *
 * baseUrl 不带末尾斜杠(对齐后端 chat_url trim_end_matches('/') 兜底,但保持干净)。
 * defaultModel 选各厂商最常用、最稳定的 chat 模型(用户可改)。
 */
export const PROVIDER_PRESETS: readonly ProviderPreset[] = [
  {
    id: 'glm',
    name: 'GLM / 智谱',
    providerType: 'openai_compat',
    // 来源:智谱 OpenAI 兼容 https://docs.bigmodel.cn/cn/guide/develop/openai/introduction
    baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
    defaultModel: 'glm-4.6',
    // glm-4.6(2025-09,355B/激活 32B)稳定便宜适合做默认;最新旗舰 GLM-5.2(2026-06-16,开源 SOTA,1M 上下文)
    // 需要更强能力改 glm-5.2(确认 model id 字符串后)。
  },
  {
    id: 'deepseek',
    name: 'DeepSeek',
    providerType: 'openai_compat',
    // 来源:DeepSeek API Docs https://api-docs.deepseek.com/
    baseUrl: 'https://api.deepseek.com',
    defaultModel: 'deepseek-v4-flash',
    // 重要:deepseek-chat / deepseek-reasoner 旧名已于 2026-07-24 停用,
    //      现分别指向 deepseek-v4-flash 的非思考/思考模式(V4-Flash 2026-07-31 发布)。
    //      思考模式改 deepseek-v4-flash(传 thinking 参数)或 deepseek-v4-pro。
  },
  {
    id: 'sensenova',
    name: 'SenseNova / 商汤',
    providerType: 'openai_compat',
    // 来源:GitHub cc-switch #2559 实测确认 token plan 端点;db 用户实测 base_url=token.sensenova.cn 可用。
    // 旧端点 https://api.sensenova.cn/compatible-mode/v1 已废弃,改为 token.sensenova.cn 对齐官方 token plan。
    // 官方文档 https://platform.sensenova.cn/docs / Token Plan https://www.sensenova.cn/token-plan
    // 完整路径:token.sensenova.cn/v1/chat/completions(HuggingFace SenseNova-U1 文档实测确认)
    baseUrl: 'https://token.sensenova.cn/v1',
    // 官方文档(platform.sensenova.cn/docs)核实:Token Plan API 仅 3 个模型 ——
    //   sensenova-6.7-flash-lite(多模态对话主力)/ sensenova-u1-fast(图像生成,不能对话)/ deepseek-v4-flash(纯文本对话)。
    // 无 U1 / U1-Pro 对话模型(那是官网产品名,API 不提供);旧 SenseNova-Turbo 已退役。
    // 默认填对话主力 sensenova-6.7-flash-lite(文档所有工具接入示例的 Model ID)。
    defaultModel: 'sensenova-6.7-flash-lite',
  },
  {
    id: 'qwen',
    name: '通义千问 / Qwen',
    providerType: 'openai_compat',
    // 来源:阿里云百炼 DashScope OpenAI 兼容
    // https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope
    // 海外节点:https://dashscope-us.aliyuncs.com/compatible-mode/v1
    // 注意:compatible-mode/v1 是 OpenAI SDK 兼容端点;原生 dashscope SDK 用 api/v1,二者不同。
    baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
    defaultModel: 'qwen-plus',
    // qwen-plus 是百炼稳定别名(指向当前 plus 档主力,无需带版本号),适合做默认;
    // 更强用 qwen-max、更便宜用 qwen-turbo,详见 https://help.aliyun.com/zh/model-studio/models
  },
  {
    id: 'moonshot',
    name: '月之暗面 / Kimi',
    providerType: 'openai_compat',
    // 来源:Kimi API 开放平台 https://platform.kimi.com/docs
    // 海外节点:https://api.moonshot.ai/v1
    // 重要:moonshot-v1 系列对新注册用户已下线,官方转向 kimi-k2 / kimi-k3 系列。
    baseUrl: 'https://api.moonshot.cn/v1',
    defaultModel: 'kimi-k3',
    // kimi-k3 = Kimi 当前旗舰(2.8T 参数 MoE,1M 上下文,原生多模态,2025-07 发布);需 Moderato 及以上会员。
    // 编程场景改 kimi-k2.7-code / kimi-k2.7-code-highspeed;通用轻量改 kimi-k2.6(256K,免费档可调用)。
  },
  {
    id: 'ernie',
    name: '百度文心 / ERNIE',
    providerType: 'openai_compat',
    // 来源:百度千帆 ModelBuilder v2 OpenAI 兼容接口
    // https://ai.baidu.com/ai-doc/WENXINWORKSHOP/2m3fihw8s
    // 鉴权用 bce-v3 开头的 V2 API Key(Bearer),不再是旧的 AK/SK + Access Token 方式
    baseUrl: 'https://qianfan.baidubce.com/v2',
    defaultModel: 'ernie-4.5-300B-A47B',
    // 当前主力:ernie-4.5-300B-A47B(MoE 架构 300B/激活 47B,128K 上下文,2025-06 开源);
    // 推理增强改 ernie-x1-turbo-32k;最新预览 ERNIE-5.1-Preview(2026-04)。
  },
  {
    id: 'spark',
    name: '讯飞星火 / Spark',
    providerType: 'openai_compat',
    // 来源:讯飞开放平台星火 HTTP 接口文档(OpenAI SDK 兼容章节)
    // https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html
    // api_key 填控制台 APIPassword(非 APIKey);完整路径 /v1/chat/completions
    baseUrl: 'https://spark-api-open.xf-yun.com/v1',
    defaultModel: '4.0Ultra',
    // 4.0Ultra 仍是官方 HTTP 文档 cURL 示例列出的综合旗舰(model 字段值经验证可用);
    // 深度推理改 spark-x1 / spark-x1.5(Ultra 已融合 X1.5 快思考模式,2026 主推);
    // 2026-03 Max 套餐下线合并到 Ultra,可选 lite / pro-128k / max-32k 等。
  },
  {
    id: 'doubao',
    name: '字节豆包 / Doubao',
    providerType: 'openai_compat',
    // 来源:火山方舟(火山引擎 Ark)OpenAI 兼容
    // https://www.volcengine.com/docs/82379/1330626 (兼容 OpenAI SDK)
    // https://www.volcengine.com/docs/82379/1298459 (Base URL 鉴权)
    // 完整路径:ark.cn-beijing.volces.com/api/v3/chat/completions
    // 注意:豆包可用「模型名」(带日期快照)或「推理接入点 Endpoint ID」(ep-xxx)调用。
    baseUrl: 'https://ark.cn-beijing.volces.com/api/v3',
    defaultModel: 'doubao-seed-1-6-250615',
    // TODO(2026-08):豆包模型名随版本迭代频繁变更且带日期快照,无"永久稳定"占位。
    //   - doubao-seed-1-6-250615(2025-06)近期已被列入下线名单,正过渡到 Doubao Seed 2.x 系列;
    //   - 2026 主力:豆包 2.1 Pro(2026-06-23 发布)/ Doubao Seed 2.1(Agent 旗舰)/ Doubao-Seed-2.0-Code(编程);
    //   - 具体可用的 model id 字符串(如 doubao-seed-2-1-xxx)需在火山方舟控制台模型列表核实后填入;
    //   - 生产环境强烈建议:控制台创建 Endpoint,把 defaultModel 改成 ep-xxxxxxxx(版本无关)。
  },
  {
    id: 'gemini',
    name: 'Google Gemini',
    providerType: 'openai_compat',
    // 来源:Google AI for Developers OpenAI compatibility
    // https://ai.google.dev/gemini-api/docs/openai
    // 关键:路径已含 /v1beta/openai,不要在末尾再补 /v1(常见错误)。
    // 认证:Gemini API Key 作 Bearer Token。
    // TODO(2026-08):该端点主要支持 Chat Completions,部分 OpenAI 高级特性(Responses API 等)不完整。
    baseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai',
    defaultModel: 'gemini-3.5-flash',
    // gemini-3.5-flash = 2026-05 Google I/O 发布的性价比主力(Firebase 文档确认 model id 无 preview 后缀);
    // 高端场景改 gemini-3.1-pro(2026-02);2.5 系列已被 3.x 接棒。
  },
  {
    id: 'openai',
    name: 'OpenAI',
    providerType: 'openai_compat',
    baseUrl: 'https://api.openai.com',
    defaultModel: 'gpt-4o',
  },
  {
    id: 'anthropic',
    name: 'Anthropic / Claude',
    providerType: 'anthropic',
    baseUrl: 'https://api.anthropic.com',
    defaultModel: 'claude-sonnet-4',
  },
] as const

/** "自定义" 项标识(下拉内置项,选中不预填任何字段) */
export const CUSTOM_PRESET_ID = '__custom' as const

/**
 * 按 id 查预设;找不到(含 CUSTOM_PRESET_ID)返回 null。
 * 调用方:null → 不预填(自定义/编辑态不覆盖用户已填值)。
 */
export function findPreset(id: string): ProviderPreset | null {
  if (id === CUSTOM_PRESET_ID) return null
  return PROVIDER_PRESETS.find(p => p.id === id) ?? null
}
