import os

from openai import OpenAI

from backend.config import get_llm_config


def get_client(*, timeout: float | None = None) -> OpenAI:
    api_key = os.getenv("DASHSCOPE_API_KEY")
    if not api_key:
        raise RuntimeError("环境变量 DASHSCOPE_API_KEY 未设置")

    llm_config = get_llm_config()
    client_timeout = timeout if timeout is not None else float(
        llm_config.get("timeout_seconds", 60)
    )
    return OpenAI(
        api_key=api_key,
        base_url=llm_config["base_url"],
        timeout=client_timeout,
    )


def call_llm(
    prompt: str,
    *,
    model: str | None = None,
    temperature: float | None = None,
    system_prompt: str | None = None,
    timeout: float | None = None,
) -> str:
    llm_config = get_llm_config()
    client = get_client(timeout=timeout)
    response = client.chat.completions.create(
        model=model or llm_config["model"],
        messages=[
            {
                "role": "system",
                "content": system_prompt or llm_config["system_prompt"],
            },
            {"role": "user", "content": prompt},
        ],
        temperature=llm_config["temperature"] if temperature is None else temperature,
    )
    return response.choices[0].message.content or ""
