"""
LLM Client - 大语言模型客户端初始化

统一初始化 LLM 客户端和相关配置常量，供服务层直接导入使用，
避免在每个函数调用时层层传递 client 参数。
"""
import logging
import httpx
from openai import OpenAI

from src.config import TEXT_MODEL_API_KEY, TEXT_MODEL_BASE_URL, TEXT_MODEL_NAME

logger = logging.getLogger(__name__)

# --- OpenRouter 应用标识头 ---
app_headers = {
    "HTTP-Referer": "https://github.com/murtaza-nasir/speakr",
    "X-Title": "Speakr - AI Audio Transcription",
    "User-Agent": "Speakr/1.0 (https://github.com/murtaza-nasir/speakr)"
}

# --- HTTP 客户端（带超时配置）---
# LLM 生成可能耗时较长，read 超时设为 5 分钟
http_client_no_proxy = httpx.Client(
    verify=True,
    headers=app_headers,
    timeout=httpx.Timeout(
        connect=10.0,    # 连接超时 10 秒
        read=300.0,      # 读取超时 5 分钟（LLM 生成可能很慢）
        write=60.0,      # 写入超时 60 秒
        pool=30.0        # 连接池等待 30 秒
    )
)

# --- OpenAI 客户端初始化 ---
try:
    # 始终尝试创建客户端 - 如果提供了 API 密钥则使用，否则使用占位符
    api_key = TEXT_MODEL_API_KEY or "not-needed"
    client = OpenAI(
        api_key=api_key,
        base_url=TEXT_MODEL_BASE_URL,
        http_client=http_client_no_proxy
    )
    logger.info(f"LLM 客户端初始化完成，端点：{TEXT_MODEL_BASE_URL}，模型：{TEXT_MODEL_NAME}")
    if "openrouter" in TEXT_MODEL_BASE_URL.lower():
        logger.info("OpenRouter 集成：已添加应用标识头")
except Exception as client_init_e:
    logger.error(f"LLM 客户端初始化失败：{client_init_e}")
    client = None
