import Layout from "@/layouts/index.vue";
import router from "@/routers/index.ts";
import { HOME_URL } from "@/config/index.ts";

/**
 * 注意：使用console.log("路由数据", JSON.stringify(generateRoutes(res.data, 0))打印会发现子路由的component打印不出来，JSON不能打印出来函数。${data[i].component}
 */
// 递归函数用于生成路由配置，登录的时候也需要调用一次。
export function generateRoutes(data: any[], parentId: any) {
  // 首先把你需要动态路由的组件地址全部获取[vue2中可以直接用拼接的方式，但是vue3中必须用这种方式]
  let modules = import.meta.glob("@/views/**/*.vue");
  const routeList: any = [];
  for (let i = 0; i < data.length; i++) {
    if (data[i] && !router.hasRoute(data[i].path)) {
      if (data[i].parentId === parentId) {

        const componentTemplate = data[i].component;
        const route: any = {
          path: `${data[i].path}`,
          name: toUpperCase(data[i].path),
          // 这里modules[`/src/views/${componentTemplate}.vue`] 一定要用绝对定位
          component: data[i]?.component ? modules[`/src/views/${componentTemplate}.vue`] : Layout,
          meta: {
            title: data[i]?.menuName,
            enName: data[i]?.enName || 'System',
            icon: data[i]?.icon,
            isHide: data[i]?.visible == '0' ? '1': '0',
            isKeepAlive: data[i].isCache,
            isLink: data[i].isFrame.includes('http') ? data[i].isFrame : '',
            isFull: '1',
            isAffix: '1',
          }
        };

        if (data[i].menuType == "1") {
          route.redirect = `${data[i]?.redirect}` || HOME_URL;
        }
        // 递归处理子节点
        const children = generateRoutes(data, data[i].menuId);
        if (children.length > 0) {
          route.children = children;
        }

        routeList.push(route);
      }
    }
  }
  return routeList;
}

/**
 * 初始化动态路由[用于生成扁平化一级路由，将后端一级路由数据转化为前端router格式的一级路由]
 */
export function generateFlattenRoutes(data: any[]) {
  // 首先把你需要动态路由的组件地址全部获取[vue2中可以直接用拼接的方式，但是vue3中必须用这种方式]
  let modules = import.meta.glob("@/views/**/*.vue");
  const routes: any = [];
  for (let i = 0; i < data.length; i++) {

    const componentTemplate = data[i].component;
    const route: any = {
      path: `${data[i].path}`,
      name: toUpperCase(data[i].path),
      // 这里modules[`/src/views/${componentTemplate}.vue`] 一定要用绝对定位
      component: data[i]?.component ? modules[`/src/views/${componentTemplate}.vue`] : Layout,
      meta: {
        parentId: data[i].parentId,
        title: data[i].menuName,
        enName: data[i]?.enName || 'System Manage',
        icon: data[i]?.icon,
        isHide: data[i]?.visible == '0' ? '1': '0',
        isKeepAlive: data[i]?.isCache,
        isLink: data[i].isFrame.includes('http') ? data[i].isFrame : '',
        isFull: '1',
        isAffix: '1',
      }
    };

    if (data[i].menuType == "1") {
      route.redirect = `${data[i]?.redirect}` || HOME_URL;
    }
    routes.push(route);
  }
  return routes;
}

const toUpperCase = (str: any) => {
  if(str) {
    // 去除所有斜杠
    str = str.replace(/\//g, "");
    return str
  } else {
    return ''
  }
}
