/**
 * AI Provider 抽象接口
 * 屏蔽 Anthropic vs OpenAI 格式差异，对上层提供统一调用
 */

export interface ToolDefinition {
  name: string;
  description: string;
  inputSchema: any;  // JSON Schema for tool input
}

export interface ToolCallRequest {
  systemPrompt: string;
  userPrompt: string;
  tool: ToolDefinition;
  /** 必须强制走 tool（Anthropic: tool_choice / OpenAI: tool_choice） */
  forceTool: boolean;
  maxTokens: number;
  model: string;
}

export interface ToolCallResponse {
  toolName: string;
  toolInput: Record<string, any>;
  inputTokens: number;
  outputTokens: number;
  rawModel: string;     // 实际服务返回的 model 字段
}

export interface PingRequest {
  model: string;
}

export interface PingResponse {
  ok: true;
  inputTokens: number;
  outputTokens: number;
}

/**
 * 所有 Provider 实现都满足此接口
 */
export interface AiProvider {
  format: 'anthropic' | 'openai';
  /** 调一次 tool 工具，返回归一化结果 */
  callTool(req: ToolCallRequest): Promise<ToolCallResponse>;
  /** 极简调用，验证 Key + 端点可用 */
  ping(req: PingRequest): Promise<PingResponse>;
}
