import OpenAI from 'openai';
import { ToolError } from '../errors';
import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';
import { AIProvider } from './anthropic';

export class OpenAIProvider implements AIProvider {
  private client: OpenAI;

  constructor(apiKey: string) {
    if (!apiKey) {
      throw new ToolError(
        'OpenAI API key is required',
        'MISSING_API_KEY'
      );
    }
    this.client = new OpenAI({ apiKey });
  }

  async sendPrompt({ model, systemPrompt, userPrompt }: {
    model: string;
    systemPrompt?: string;
    userPrompt: string;
  }): Promise<string> {
    try {
      const messages: ChatCompletionMessageParam[] = [];
      if (systemPrompt) {
        messages.push({ role: 'system', content: systemPrompt });
      }
      messages.push({ role: 'user', content: userPrompt });

      const response = await this.client.chat.completions.create({
        model: model,
        messages: messages,
        ...(model.startsWith('o1-') ? { max_completion_tokens: 32768 } : { max_tokens: 50000 }),
      });

      return response.choices[0].message.content || '';
    } catch (error: any) {
      throw new ToolError(
        `OpenAI API error: ${error.message}`,
        'API_ERROR',
        error
      );
    }
  }
} 