
"""
MCP服务器初始化模块

该模块提供了MCP服务器的初始化功能，包括企业ID获取和向量库初始化。
"""

from typing import Optional, Dict, Any
from .device_operations import DeviceOperator
from .vector_service import VectorService
from .logger_config import get_logger

# 延迟初始化日志器，避免在导入时立即执行
logger = None

def _ensure_logger():
    """确保日志器已初始化"""
    global logger
    if logger is None:
        logger = get_logger(__name__)
    return logger


def init_mcp_server(
    device_op: DeviceOperator,
    vector_service: VectorService,
    enterprise_id: str
) -> Dict[str, Any]:
    """
    初始化MCP服务器

    该函数执行以下步骤：
    1. 验证企业ID
    2. 检查向量库状态
    3. 如果向量库不存在，则创建向量库

    参数:
        device_op: 设备操作实例
        vector_service: 向量服务实例
        enterprise_id: 企业ID（从环境变量获取）

    返回:
        Dict[str, Any]: 初始化结果，包含状态码、消息和数据
    """
    logger = _ensure_logger()
    try:
        # 输入参数验证
        if not enterprise_id or not isinstance(enterprise_id, str):
            error_msg = f"无效的企业ID: {enterprise_id}"
            logger.error(error_msg)
            return {
                "code": 400,
                "msg": error_msg,
                "data": None
            }

        if not isinstance(device_op, DeviceOperator):
            error_msg = "device_op参数必须是DeviceOperator实例"
            logger.error(error_msg)
            return {
                "code": 400,
                "msg": error_msg,
                "data": None
            }

        if not isinstance(vector_service, VectorService):
            error_msg = "vector_service参数必须是VectorService实例"
            logger.error(error_msg)
            return {
                "code": 400,
                "msg": error_msg,
                "data": None
            }

        logger.info(f"开始初始化MCP服务器，企业ID: {enterprise_id}")

        # 第一步：检查向量库状态
        logger.info("第一步：检查向量库状态...")
        vector_store_exists = vector_service.check_vector_store_status(enterprise_id)
        logger.info(f"向量库状态检查完成，存在状态: {vector_store_exists}")

        # 如果向量库不存在，则创建向量库
        if not vector_store_exists:
            logger.info("向量库不存在，开始创建向量库...")
            init_result = vector_service.init_vector_store(keyId=enterprise_id)

            # 检查初始化结果
            if init_result.get("status") == "error":
                error_msg = f"向量库初始化失败: {init_result.get('message')}"
                logger.error(error_msg)
                return {
                    "code": 500,
                    "msg": error_msg,
                    "data": {
                        "enterprise_id": enterprise_id,
                        "vector_store_created": False,
                        "init_result": init_result
                    }
                }
            else:
                logger.info("向量库创建成功")
                return {
                    "code": 200,
                    "msg": "MCP服务器初始化成功，向量库已创建",
                    "data": {
                        "enterprise_id": enterprise_id,
                        "vector_store_created": True,
                        "vector_store_existed": False,
                        "init_result": init_result
                    }
                }
        else:
            logger.info("向量库已存在，无需创建")
            return {
                "code": 200,
                "msg": "MCP服务器初始化成功，向量库已存在",
                "data": {
                    "enterprise_id": enterprise_id,
                    "vector_store_created": False,
                    "vector_store_existed": True
                }
            }

    except Exception as e:
        error_msg = f"MCP服务器初始化过程中发生异常: {str(e)}"
        logger.error(error_msg, exc_info=True)
        return {
            "code": 500,
            "msg": error_msg,
            "data": None
        }
