# =============================================================================
# RAGFlow 配置加载器
# =============================================================================
# 说明：从数据库 system_configs 表加载 RAGFlow 配置，创建客户端实例
# 配置项：integration_ragflow_api_url + integration_ragflow_api_key

import logging
from typing import Optional

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

from app.models.system_config import SystemConfig

from .client import RagflowClient
from .exceptions import RagflowConfigError

logger = logging.getLogger(__name__)

# 默认 RAGFlow API 地址（生产环境）
DEFAULT_RAGFLOW_BASE_URL = "http://10.80.0.85:9380"


async def _get_config(db: AsyncSession, key: str) -> str:
    """从数据库读取单个配置值。"""
    result = await db.execute(
        select(SystemConfig.config_value).where(SystemConfig.config_key == key)
    )
    row = result.scalar()
    return row if row else ""


async def get_ragflow_client(db: AsyncSession) -> RagflowClient:
    """从数据库配置创建 RAGFlow 客户端实例。

    读取 system_configs 表中的：
    - integration_ragflow_api_url: RAGFlow API 地址
    - integration_ragflow_api_key: RAGFlow API Key

    Args:
        db: 数据库会话

    Returns:
        RagflowClient: 客户端实例

    Raises:
        RagflowConfigError: 配置缺失
    """
    api_url = await _get_config(db, "integration_ragflow_api_url")
    api_key = await _get_config(db, "integration_ragflow_api_key")

    # 如果数据库没有配置，使用默认地址
    if not api_url:
        api_url = DEFAULT_RAGFLOW_BASE_URL

    if not api_key:
        raise RagflowConfigError(
            "RAGFlow API Key 未配置，请在管理后台 → 集成管理 → RAGFlow 中设置"
        )

    return RagflowClient(api_key=api_key, base_url=api_url)
