import logging
from typing import Any

from openai import AsyncOpenAI

from app.providers.llm.base import LLMProvider

logger = logging.getLogger(__name__)


class OpenAILLMProvider(LLMProvider):
    def __init__(self, api_key: str, model: str = "gpt-4o-mini") -> None:
        if not api_key:
            raise ValueError("OPENAI_API_KEY is required for OpenAI provider")
        self.client = AsyncOpenAI(api_key=api_key)
        self.model = model

    async def generate(
        self,
        messages: list[dict[str, Any]],
        system_prompt: str,
    ) -> str:
        payload = [{"role": "system", "content": system_prompt}, *messages]
        logger.info("OpenAI generate model=%s messages=%s", self.model, len(messages))
        response = await self.client.chat.completions.create(
            model=self.model,
            messages=payload,
            temperature=0.7,
        )
        return (response.choices[0].message.content or "").strip()
