/**
 * 菜单相关类型定义
 * 基于 TbSysViewDTO 扩展
 */

import type { TbSysViewDTO } from '../sys/permission'

/**
 * 菜单项类型
 * 扩展 TbSysViewDTO，添加运行时状态
 */
export interface MenuItem extends TbSysViewDTO {
    /** 唯一标识（用于菜单选中状态），覆盖为必需 */
    key: string
    /** 显示标签，覆盖为必需 */
    label: string
    /** 是否展开（运行时状态，仅用于有子菜单的项） */
    expanded?: boolean
    /** 子菜单（覆盖类型为 MenuItem[]） */
    children?: MenuItem[]
}

/**
 * 从 TbSysViewDTO 转换为 MenuItem
 */
export function toMenuItem(view: TbSysViewDTO, expanded = false): MenuItem {
    return {
        ...view,
        key: view.viewId || view.name || '',
        label: view.name || '',
        expanded,
        // 递归转换子菜单
        children: view.children?.map(child => toMenuItem(child, false))
    }
}

/**
 * 从 TbSysViewDTO 数组转换为 MenuItem 数组
 */
export function toMenuItems(views: TbSysViewDTO[], defaultExpanded = false): MenuItem[] {
    return views.map(view => toMenuItem(view, defaultExpanded))
}
