export const LIGHT_MENU_NAMES = new Set([
  'AIAgent',
  'AIKnowledgeDetail',
  'AIModelConfig',
  'AIPlatform',
  'AIWorkflow',
  'AIWorkflowRuns',
  'AccountSettings',
  'AnnouncementList',
  'AnnouncementManage',
  'ControlCenter',
  'KnowledgeBase',
  'SystemManagement',
  'SystemMenu',
  'SystemPermission',
  'SystemRole',
  'UserManagement',
  'userSettings',
]);

const LIGHT_ROUTE_PATH_PREFIXES = [
  '/account-settings',
  '/ai-platform/agent',
  '/ai-platform/knowledge',
  '/ai-platform/knowledge-base',
  '/ai-platform/model',
  '/ai-platform/workflow',
  '/ai-platform/workflow-runs',
  '/message/announcement',
  '/system/menu',
  '/system/new-permission',
  '/system/role',
  '/system/user',
];

export function isLightMenuName(name?: string) {
  return !name || LIGHT_MENU_NAMES.has(name);
}

function normalizePath(path?: string) {
  if (!path) return '';
  return path.split('?')[0]?.replace(/\/$/, '') || '';
}

export function isLightTabRoute(route: {
  fullPath?: string;
  matched?: Array<{ name?: unknown; path?: string }>;
  name?: unknown;
  path?: string;
}) {
  if (typeof route.name === 'string' && LIGHT_MENU_NAMES.has(route.name)) {
    return true;
  }

  if (
    route.matched?.some(
      (item) =>
        typeof item.name === 'string' && LIGHT_MENU_NAMES.has(item.name),
    )
  ) {
    return true;
  }

  const path = normalizePath(route.fullPath || route.path);
  return LIGHT_ROUTE_PATH_PREFIXES.some(
    (prefix) => path === prefix || path.startsWith(`${prefix}/`),
  );
}

export function filterLightMenuTree<
  T extends { children?: T[]; name?: string },
>(routes: T[]): T[] {
  return routes
    .map((route) => {
      const children = route.children
        ? filterLightMenuTree(route.children)
        : undefined;

      if (!isLightMenuName(route.name) && !children?.length) {
        return undefined;
      }

      return children ? { ...route, children } : route;
    })
    .filter(Boolean) as T[];
}
