//这里实现导入modlues文件夹下面的所有文件，整合成一个完整的路由
import type { RouteRecordRaw } from 'vue-router';
import { REDIRECT_MAIN, NOT_FOUND_ROUTE } from './base';

// 使用 require.context 导入 modules 文件夹下的所有路由模块
// @ts-expect-error: webpack 特定功能，TypeScript 不识别
const modulesFiles = require.context('./modules', false, /\.ts$/);

// 处理导入的模块，提取路由配置
const moduleRoutes = modulesFiles.keys().reduce((routes: RouteRecordRaw[], modulePath: string) => {
  // 获取模块的默认导出
  const module = modulesFiles(modulePath);
  // 如果模块有默认导出，将其添加到路由数组中
  if (module.default) {
    // 单个路由
    if (!Array.isArray(module.default)) {
      routes.push(module.default as RouteRecordRaw);
    } 
    // 多个路由的数组
    else {
      routes.push(...(module.default as RouteRecordRaw[]));
    }
  }
  return routes;
}, [] as RouteRecordRaw[]);

// 合并所有路由，包括基础路由和模块路由
const appRoutes: RouteRecordRaw[] = [
  {
    path: '/',
    redirect: '/home',
  },
  ...moduleRoutes,
  REDIRECT_MAIN,
  NOT_FOUND_ROUTE,
];

export default appRoutes;
