import type { MenuRecordRaw } from '@vben/types';

/** 可搜索的菜单项（拍平后的叶子菜单） */
export type SearchableMenuItem = {
  title: string;
  path: string;
  icon: string;
};

/**
 * 将 accessMenus 递归拍平为叶子菜单列表
 * 为什么：工作台本地搜索需要覆盖当前账号全部授权页面，叶子节点才是可跳转页
 */
export function flattenMenus(menus: MenuRecordRaw[]): SearchableMenuItem[] {
  const result: SearchableMenuItem[] = [];
  const walk = (list: MenuRecordRaw[]) => {
    for (const menu of list) {
      if (menu.children && menu.children.length > 0) {
        walk(menu.children);
      } else if (menu.path) {
        result.push({
          title: String(menu.name || ''),
          path: menu.path,
          icon: typeof menu.icon === 'string' ? menu.icon : '',
        });
      }
    }
  };
  walk(menus);
  return result;
}

/**
 * 本地关键字过滤（忽略大小写的标题包含匹配）
 */
export function filterMenusByKeyword(
  items: SearchableMenuItem[],
  keyword: string,
): SearchableMenuItem[] {
  const kw = keyword.trim().toLowerCase();
  if (!kw) return [];
  return items.filter((item) => item.title.toLowerCase().includes(kw));
}
