import { ChatMessage, ChatOptions, ProviderResponse } from "../types/chat";
import { IAIProvider, ProviderCapabilities } from "../types/provider";
import { StandardizedToolCall } from "../types/tool";

export class MockAIProvider implements IAIProvider {
  async chat(messages: ChatMessage[], options: ChatOptions): Promise<ProviderResponse> {
    return { 
      content: `Mock response to: ${messages[messages.length - 1].content}`,
      toolCalls: [],
      usage: {
        promptTokens: 10,
        completionTokens: 20,
        totalTokens: 30
      }
    };
  }

  async *streamChat(messages: ChatMessage[], options: ChatOptions): AsyncIterableIterator<ProviderResponse> {
    yield { 
      content: `Mock streaming response to: ${messages[messages.length - 1].content}`,
      toolCalls: [],
      usage: {
        promptTokens: 5,
        completionTokens: 10,
        totalTokens: 15
      }
    };
  }

  convertToolSchema(schema: any): unknown {
    return schema;
  }

  convertToolCall(call: unknown): StandardizedToolCall {
    return {
      name: 'mockTool',
      arguments: {}
    };
  }

  use(middleware: any): void {}

  registerPlugin(plugin: any): void {}

  getCapabilities(): ProviderCapabilities {
    return {
      maxTokens: 1000,
      supportsFunctionCalling: false,
      supportsStreaming: true,
      supportedModels: ['mock-model'],
      maxSimultaneousCalls: 1,
      supportsSemanticCaching: false
    };
  }
}