import axios from 'axios';
import { OpenAIConfig } from './config';

export async function embed(config: OpenAIConfig, text: string): Promise<number[]> {
  try {
    const response = await axios.post(
      'https://api.openai.com/v1/embeddings',
      {
        model: 'text-embedding-ada-002',
        input: text,
      },
      {
        headers: {
          'Authorization': `Bearer ${config.getApiKey()}`,
          'Content-Type': 'application/json',
        },
      }
    );
    return response.data.data[0].embedding;
  } catch (error) {
    handleError(config, error);
    throw error;
  }
}

export async function embedBatch(config: OpenAIConfig, texts: string[]): Promise<number[][]> {
  try {
    const response = await axios.post(
      'https://api.openai.com/v1/embeddings',
      {
        model: 'text-embedding-ada-002',
        input: texts,
      },
      {
        headers: {
          'Authorization': `Bearer ${config.getApiKey()}`,
          'Content-Type': 'application/json',
        },
      }
    );
    return response.data.data.map((item: { embedding: number[] }) => item.embedding);
  } catch (error) {
    handleError(config, error);
    throw error;
  }
}

function handleError(config: OpenAIConfig, error: any): void {
  const logger = config.getLogger();
  if (axios.isAxiosError(error)) {
    logger.error('OpenAIProvider: API request failed:', {
      status: error.response?.status,
      message: error.message,
      data: error.response?.data
    });
  } else {
    logger.error('OpenAIProvider: Unexpected error:', error);
  }
}