import json
from openai import OpenAI

from config import LLM_API_KEY, LLM_BASE_URL, LLM_MODEL


class LLMClient:
    def __init__(self, api_key: str = None, base_url: str = None, model: str = None):
        self.api_key = api_key or LLM_API_KEY
        self.base_url = base_url or LLM_BASE_URL
        self.model = model or LLM_MODEL
        self.client = None
        if self.api_key:
            self.client = OpenAI(api_key=self.api_key, base_url=self.base_url)

    def chat(self, prompt: str, system: str = "", temperature: float = 0.3) -> str:
        if not self.client:
            return ""
        messages = []
        if system:
            messages.append({"role": "system", "content": system})
        messages.append({"role": "user", "content": prompt})
        try:
            resp = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=temperature,
                max_tokens=1024,
            )
            return resp.choices[0].message.content or ""
        except Exception as e:
            return f"[LLM Error: {e}]"

    def batch_analyze(self, items: list, system: str, batch_size: int = 10) -> list:
        results = []
        for i in range(0, len(items), batch_size):
            batch = items[i:i + batch_size]
            prompt = "\n---\n".join(str(x) for x in batch)
            result = self.chat(prompt, system)
            results.append(result)
        return results

    def is_available(self) -> bool:
        return self.client is not None and bool(self.api_key)
