/**
 * Provider Module Types
 *
 * 模型提供商类型定义
 */

import type { LanguageModel } from 'ai';

/** 内置提供商类型 */
export type BuiltinProviderType = 'anthropic' | 'deepseek' | 'openai';

/** 提供商类型（内置 + 自定义） */
export type ProviderType = BuiltinProviderType | string;

/** 模型能力 */
export interface ModelCapabilities {
  /** 支持视觉/图片 */
  vision?: boolean;
  /** 支持函数调用 */
  functionCalling?: boolean;
  /** 支持流式输出 */
  streaming?: boolean;
}

/** 模型信息 */
export interface ModelInfo {
  /** 模型 ID（如 'claude-sonnet-4-20250514'） */
  id: string;
  /** 显示名称（如 'Claude Sonnet 4'） */
  name: string;
  /** 模型能力 */
  capabilities?: ModelCapabilities;
  /** 上下文窗口大小（tokens） */
  contextWindow?: number;
  /** 最大输出 tokens */
  maxOutput?: number;
}

/** 提供商元信息 */
export interface ProviderInfo {
  /** 提供商唯一 ID */
  id: string;
  /** 显示名称 */
  name: string;
  /** 描述 */
  description?: string;
  /** 是否为内置提供商 */
  builtin: boolean;
  /** API 基础 URL */
  baseUrl?: string;
  /** API Key 环境变量名 */
  apiKeyEnvVar?: string;
  /** 可用模型列表 */
  models: ModelInfo[];
  /** 是否允许自定义模型 */
  allowCustomModels?: boolean;
}

/** 提供商配置（用户设置） */
export interface ProviderConfig {
  /** 提供商 ID */
  id: string;
  /** API Key（直接存储，不推荐） */
  apiKey?: string;
  /** API Key 环境变量名 */
  apiKeyEnvVar?: string;
  /** 自定义 Base URL */
  baseUrl?: string;
  /** 是否启用 */
  enabled?: boolean;
  /** 用户添加的自定义模型 */
  customModels?: ModelInfo[];
}

/** 自定义提供商定义（用户注册时使用） */
export interface CustomProviderDefinition {
  /** 提供商唯一 ID */
  id: string;
  /** 显示名称 */
  name: string;
  /** 描述 */
  description?: string;
  /** API 基础 URL（必填） */
  baseUrl: string;
  /** API Key 环境变量名 */
  apiKeyEnvVar?: string;
  /** 可用模型列表 */
  models?: ModelInfo[];
  /** 是否允许自定义模型 */
  allowCustomModels?: boolean;
}

/** 连接测试结果 */
export interface ConnectionTestResult {
  /** 是否成功 */
  success: boolean;
  /** 延迟（毫秒） */
  latency?: number;
  /** 错误信息 */
  error?: string;
}

/** Provider 工厂函数 */
export type ProviderFactory = (config: {
  apiKey: string;
  baseUrl?: string;
}) => (model: string) => LanguageModel;

/** 已注册的提供商（运行时） */
export interface RegisteredProvider {
  /** 提供商信息 */
  info: ProviderInfo;
  /** 模型工厂函数 */
  factory: ProviderFactory;
  /** 用户配置 */
  config?: ProviderConfig;
}

/** 提供商配置文件格式 */
export interface ProvidersConfigFile {
  /** 自定义提供商定义 */
  providers?: Record<string, CustomProviderDefinition>;
  /** 提供商配置（API Key、选项等） */
  configs?: Record<string, ProviderConfig>;
}

/** 提供商列表项（API 响应用） */
export interface ProviderListItem {
  id: string;
  name: string;
  description?: string;
  builtin: boolean;
  enabled: boolean;
  hasApiKey: boolean;
  modelCount: number;
}

/** 提供商详情（API 响应用） */
export interface ProviderDetail {
  id: string;
  name: string;
  description?: string;
  builtin: boolean;
  baseUrl?: string;
  apiKeyEnvVar?: string;
  models: ModelInfo[];
  allowCustomModels: boolean;
  config?: {
    enabled: boolean;
    hasApiKey: boolean;
    baseUrl?: string;
    customModels: ModelInfo[];
  };
}
