# =============================================================================
# 企微IT智能服务台 — 系统管理 API
# =============================================================================
# 说明：系统级配置管理接口，包括：
#   1. GET  /api/system/emergency-mode  — 查询应急模式状态
#   2. PUT  /api/system/emergency-mode  — 切换应急模式开关
# =============================================================================

import logging

from fastapi import APIRouter, Depends
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

from app.database import get_db
from app.models.system_config import SystemConfig
from app.utils.response import AppException, success_response

logger = logging.getLogger(__name__)

# 创建路由器
router = APIRouter()

# 应急模式配置键（与 main.py init_data 保持一致）
EMERGENCY_MODE_KEY = "emergency_mode"


# --------------------------------------------------------------------------
# GET /api/system/emergency-mode — 查询应急模式状态
# --------------------------------------------------------------------------
@router.get("/system/emergency-mode")
async def get_emergency_mode(
    db: AsyncSession = Depends(get_db),
):
    """查询应急模式状态。

    返回当前应急模式的开关状态。
    应急模式开启时，智能服务台降级，引导员工使用企微原生「员工服务」通道。

    Returns:
        Dict: 统一响应格式
            data.emergency_mode: bool — 是否启用应急模式
            data.employee_service_guide: str — 开启时的引导文案（仅开启时返回）
    """
    # 从数据库读取 emergency_mode 配置
    stmt = select(SystemConfig).where(
        SystemConfig.config_key == EMERGENCY_MODE_KEY
    )
    result = await db.execute(stmt)
    config = result.scalars().first()

    # 配置不存在时默认关闭（安全默认值）
    is_enabled = False
    if config and config.config_value:
        is_enabled = config.config_value.lower() in ("true", "1", "yes")

    response_data = {"emergency_mode": is_enabled}

    # 应急模式开启时，附带引导文案
    if is_enabled:
        response_data["employee_service_guide"] = (
            "IT智能服务台正在进行系统维护，"
            "请通过企业微信「通讯录 → 员工服务」联系IT支持人员，"
            "我们将尽快为您处理。"
        )

    return success_response(data=response_data)


# --------------------------------------------------------------------------
# PUT /api/system/emergency-mode — 切换应急模式开关
# --------------------------------------------------------------------------
@router.put("/system/emergency-mode")
async def toggle_emergency_mode(
    body: dict,
    db: AsyncSession = Depends(get_db),
):
    """切换应急模式开关（仅限坐席/管理员操作）。

    开启应急模式后：
    - H5 用户端页面显示引导文案，提示走企微原生「员工服务」
    - 坐席工作台顶部显示醒目的应急模式横幅

    关闭应急模式后恢复正常服务。

    Args:
        body: 请求体，包含 emergency_mode: bool

    Returns:
        Dict: 统一响应格式
            data.emergency_mode: bool — 切换后的状态
    """
    enabled = body.get("emergency_mode", None)
    if enabled is None:
        raise AppException(1001, "emergency_mode 参数不能为空")

    enabled_bool = bool(enabled)

    # 查找或创建 emergency_mode 配置项
    stmt = select(SystemConfig).where(
        SystemConfig.config_key == EMERGENCY_MODE_KEY
    )
    result = await db.execute(stmt)
    config = result.scalars().first()

    new_value = "true" if enabled_bool else "false"

    if config:
        # 更新已有配置
        config.config_value = new_value
    else:
        # 配置不存在时新建（兜底，正常情况由 init_data 创建）
        config = SystemConfig(
            config_key=EMERGENCY_MODE_KEY,
            config_value=new_value,
            description="应急模式开关（true=启用员工服务通道，智能服务台降级）",
        )
        db.add(config)

    await db.flush()

    status_text = "开启" if enabled_bool else "关闭"
    logger.info(f"应急模式已{status_text}")

    return success_response(
        data={
            "emergency_mode": enabled_bool,
            "message": f"应急模式已{status_text}",
        }
    )
