import type { RouteRecordRaw } from 'vue-router';
import { isArray } from 'lodash-es';
import { appConfig } from '/@/config/app.config.ts';
const modules = import.meta.globEager('/src/router/**/*.ts');

// const jsonModules = import.meta.globEager('/src/data/router/*.json');

const routers: any[] = [];
// Object.keys(modules).forEach((key) => {
//   const mod = modules[key].default || {};
//   const modList = Array.isArray(mod) ? [...mod] : [mod];
//   modList[0].path && routers.push(...modList);
// });

// Object.keys(jsonModules).forEach((key) => {
//   const mod = jsonModules[key].default || {};
//   const modList = Array.isArray(mod) ? [...mod] : [mod];
//   modList.forEach((item, index) => {
//     modList[index] = setComponent(item);
//   });
//   routers.push(...modList);
// });

/**
 * 检测路由中是否包含name为root的路由(root是默认路由)
 * @param routers
 */
function hasRoot(routers: RouteRecordRaw[]): boolean {
  let root = undefined;
  function checkRoot(route: RouteRecordRaw | RouteRecordRaw[]) {
    if (isArray(route)) {
      for (let i = 0, l = route.length; i < l; i++) {
        checkRoot(route[i]);
      }
    } else {
      if (route.name === 'root') {
        return (root = route);
      }
      if (route.children) {
        for (let i = 0, l = route.children.length; i < l; i++) {
          checkRoot(route.children[i]);
        }
      }
    }
  }
  checkRoot(routers);
  return !!root;
}
// if (!hasRoot(routers)) console.error('Route named root is required  as the default route');

function setComponent(route: any) {
  /* @vite-ignore */
  const component = route.component;
  if (component) {
    route.component = () =>
      import(/* @vite-ignore */ `/nerv-lib/paas/view/service/${component}.vue`);
  } else {
    route.component = () =>
      import(/* @vite-ignore */ '/nerv-lib/paas/view/system/layout/content.vue');
  }
  if (route.children) {
    route.children.forEach((item: Object, index: number) => {
      route.children[index] = setComponent(item);
    });
  }
  return route;
}

/**
 * 登陆页面路由
 */
export const LoginRoute = {
  path: '/login',
  name: 'login',
  component: appConfig.customLogin
    ? appConfig.customLogin
    : () => import('/nerv-lib/paas/view/system/login.vue'),
  meta: {
    title: '登录',
  },
};

/**
 * 页面不存在
 */
export const Error404Route = {
  path: '/:pathMatch(.*)*',
  name: 'error404',
  component: () => import('/nerv-lib/paas/view/service/error-404.vue'),
};

/**
 * 页面无权限
 */
export const Error403Route = {
  path: '/403',
  name: 'error403',
  component: () => import('/nerv-lib/paas/view/service/error-403.vue'),
};

/**
 * 默认路由 转发至root
 */
export const RootRoute = {
  path: '/',
  name: 'rootRoute',
  redirect: 'root',
};
const outControlPageName: any[] = [];
Object.keys(modules).forEach((key) => {
  const mod = modules[key].default || {};
  if (mod.name && mod.outContrl) {
    outControlPageName.push(mod.name);
  }
});
export const WHITE_NAME_LIST = [
  Error404Route.name,
  Error403Route.name,
  LoginRoute.name,
  ...outControlPageName,
];

export const ALLRoute = [...routers, LoginRoute, Error403Route, Error404Route, RootRoute];