import os

import httpx

from app.llm.mock_engine import generate_secure, generate_vulnerable


async def call_llm(
    prompt: str,
    *,
    user_input: str,
    task: str = "translate",
    mode: str = "secure",
    injection_detected: bool = False,
) -> str:
    provider = os.getenv("LLM_PROVIDER", "mock")
    if provider == "mock":
        if mode == "vulnerable":
            return generate_vulnerable(user_input, task=task)
        return generate_secure(
            prompt,
            user_input=user_input,
            task=task,
            injection_detected=injection_detected,
        )

    api_key = os.getenv("OPENAI_API_KEY")
    if not api_key:
        raise RuntimeError("LLM_PROVIDER 非 mock 时需配置 OPENAI_API_KEY")

    base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
    model = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

    async with httpx.AsyncClient(timeout=60.0) as client:
        resp = await client.post(
            f"{base_url}/chat/completions",
            headers={"Authorization": f"Bearer {api_key}"},
            json={
                "model": model,
                "messages": [{"role": "user", "content": prompt}],
                "temperature": 0.2,
            },
        )
        resp.raise_for_status()
        data = resp.json()
        return data["choices"][0]["message"]["content"]
