"""
模块名称：menu_mapping.py
模块描述：菜单层级映射配置

用于智能定位时正确导航二级菜单。

探索结果：
- 新建会议: /#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FCreateMeeting

URL 模式分析：
- 会议相关: /#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2F{Page}
- 数据统计: /#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2F{Page}

@author czj
@date 2026-08-04
最后修改：2026-08-05
"""

# ==================== 功能中心抽屉菜单层级 ====================

# 二级菜单层级关系：分类 → 子菜单列表
# 这些菜单在功能中心抽屉内需要先点击分类展开
DRAWER_MENU_HIERARCHY = {
    # 集控控制（二级菜单）
    "集控控制": [
        "壁纸推送", "脚本命令", "应用管理", "屏幕管理",
        "软件卸载", "设备网络", "门口屏发布", "播放器发布"
    ],
    # 资产管理（二级菜单）
    "资产管理": ["资产信息", "资产设备"],
    # 会议运维（二级菜单）
    "会议运维": ["运维设备", "运维巡检"],
    # 维护工单（二级菜单）
    "维护工单": ["工单列表", "我的工单", "告警工单"],
    # 信息管理（二级菜单）
    "信息管理": ["信息窗管理", "消息通知"],
    # 会务管理（二级菜单）
    "会务管理": ["会务统筹", "会务工单"],
}

# 直接菜单（无子菜单，点击后直接跳转）
DIRECT_MENUS = [
    "信息发布", "数据统计", "预定2.0",
    "会议管理", "数据分析", "运维管理",
    "管理看板", "通知公告", "会议室管理",
    "系统设置", "其他分类"
]


def get_menu_parent(menu_name: str) -> str | None:
    """
    获取菜单的父分类

    Args:
        menu_name: 菜单名称

    Returns:
        父分类名称，如果是直接菜单返回 None
    """
    # 检查是否是直接菜单
    if menu_name in DIRECT_MENUS:
        return None

    # 查找父分类
    for parent, children in DRAWER_MENU_HIERARCHY.items():
        if menu_name in children:
            return parent

    # 默认认为是直接菜单
    return None


def is_direct_menu(menu_name: str) -> bool:
    """
    判断是否为直接菜单

    Args:
        menu_name: 菜单名称

    Returns:
        True 表示直接菜单，False 表示二级菜单
    """
    return get_menu_parent(menu_name) is None


def get_all_menus() -> list:
    """
    获取所有菜单名称（包括直接菜单和二级菜单）

    Returns:
        所有菜单名称列表
    """
    all_menus = list(DIRECT_MENUS)
    for children in DRAWER_MENU_HIERARCHY.values():
        all_menus.extend(children)
    return all_menus


# ==================== 首页菜单 URL 映射 ====================

# 首页菜单卡片 URL 映射
MENU_BLOCK_ROUTES = {
    # 会议管理相关
    '新建会议': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FCreateMeeting',
    '会议模板': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingTemplate',
    '个人日程': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FPersonalSchedule',
    '会议室列表': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingRoomList',
    '会议列表': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingList',

    # 数据统计相关
    '预定数据': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FReservationData',
    '使用数据': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FUsageData',
    '管理看板': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FManagementBoard',
    '故障数据': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FFaultData',
    '运维数据': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FOperationData',

    # 运维统计
    '运维统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FOperationStatistics',
    '巡检报表': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FInspectionReport',
    '会议统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingStatistics',
    '通知统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FNotificationStatistics',
    '会议服务统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingServiceStatistics',
    '会议室统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingRoomStatistics',

    # 第三方集成统计
    'Welink会议统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FWelinkStatistics',
    '历史记录-WeLink': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FWelinkHistory',
    'SMC3.0会议统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FSMCStatistics',
    '历史记录-SMC3.0': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FSMCHistory',
    'RSE会议统计': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FRSEStatistics',
    '历史记录-RSE': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FRSEHistory',

    # 概览
    '会议概览': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingOverview',
    '会议室概览': '/#/meetingV3?meetingV3=%2FmeetingV3%2F%23%2FMeetingRoomOverview',
}

# 一级菜单到子菜单的映射（用于智能推断）
MENU_HIERARCHY = {
    '会议管理': ['新建会议', '会议模板', '个人日程', '会议室列表', '会议列表'],
    '数据统计': ['预定数据', '使用数据', '管理看板', '故障数据', '运维数据'],
    '运维管理': ['运维统计', '巡检报表'],
    '统计报表': ['会议统计', '通知统计', '会议服务统计', '会议室统计'],
    '第三方集成': ['Welink会议统计', '历史记录-WeLink', 'SMC3.0会议统计', '历史记录-SMC3.0', 'RSE会议统计', '历史记录-RSE'],
    '概览': ['会议概览', '会议室概览'],
}


if __name__ == "__main__":
    import json
    print("首页菜单 URL 映射：")
    print("=" * 60)
    for menu, url in MENU_BLOCK_ROUTES.items():
        print(f"{menu:20s} -> {url}")

    print("\n一级菜单层级：")
    print("=" * 60)
    for parent, children in MENU_HIERARCHY.items():
        print(f"{parent}: {', '.join(children)}")

    # 保存到 JSON
    with open("menu_mapping.json", 'w', encoding='utf-8') as f:
        json.dump({
            "block_routes": MENU_BLOCK_ROUTES,
            "hierarchy": MENU_HIERARCHY
        }, f, ensure_ascii=False, indent=2)
    print("\n映射已保存到: menu_mapping.json")