import OpenAI from 'openai';

let openai: OpenAI | null = null;

const getOpenAI = () => {
  if (!openai) {
    const apiKey = process.env.OPENAI_API_KEY;
    if (!apiKey) {
      throw new Error('OPENAI_API_KEY environment variable is not set');
    }
    openai = new OpenAI({ apiKey });
  }
  return openai;
};

export const getOpenAIClient = () => {
  return {
    generate: async (prompt: string) => {
      const client = getOpenAI();
      
      // Create a timeout promise
      const timeoutPromise = new Promise((_, reject) => {
        setTimeout(() => {
          reject(new Error('OpenAI API request timed out after 90 seconds'));
        }, 90000);
      });
      
      try {
        const apiPromise = client.chat.completions.create({
          model: 'gpt-3.5-turbo',
          messages: [{ role: 'user', content: prompt }],
        });
        
        const response = await Promise.race([
          apiPromise,
          timeoutPromise
        ]) as OpenAI.Chat.Completions.ChatCompletion;
        
        return response.choices[0].message.content || '';
      } catch (error) {
        console.error('[ERROR] OpenAI API error:', error);
        throw error;
      }
    },
  };
};
