/**
 * @description router全局配置，如有必要可分文件抽离
 * hidden:true                        是否显示在菜单中显示路由（默认值：false）
 * alwaysShow:true                    当只有一级子路由时是否显示父路由是否显示在菜单中显示路由（默认值：false）
 * name:"Demo"                        首字母大写，一定要与vue文件的name对应起来
 * meta:{
    title:"title"                     菜单、面包屑、标签页显示的名称
    roles:["admin","..."]             当config/settings.js中rolesControl配置开启时，用于控制角色
    remixIcon:""                      remix图标
    affix:true                        当前路由是否固定标签页
    activeMenu: '',                   高亮指定菜单
    dynamicNewTab: true,              动态路径新页面是否新建标签
   }
 */
import {
  createRouter,
  createWebHistory,
  createWebHashHistory,
} from 'vue-router';
// import Layout from '@/vab/layouts'
import { getNames } from '@/utils/routes';
import { setupGuard } from '@/router/guard';
import { isHashRouterMode } from '@/config';
import { handleMenu } from '@/utils/menu';
import Layout from '@/vab/layouts';
// import store from '@/store'
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true,
  },
  {
    path: '/trialAdd',
    component: () => import('@/views/login/trialAdd'),
    hidden: true,
  },
  {
    path: '/403',
    name: '403',
    component: () => import('@/views/403'),
    hidden: true,
  },
  {
    path: '/404',
    name: '404',
    component: () => import('@/views/404'),
    hidden: true,
  },
];

// export const asyncRoutes = [
//   {
//     path: '/',
//     name: 'Root',
//     component: Layout,
//     redirect: '/index',
//     meta: {
//       title: '首页',
//       remixIcon: 'home-2-line',
//     },
//     children: [
//       {
//         path: 'index',
//         name: 'Index',
//         component: () => import('@/views/index'),
//         meta: {
//           title: '导航菜单',
//           remixIcon: 'home-2-line',
//           affix: true,
//         },
//       },
//     ],
//   },
//   {
//     path: '/server',
//     name: 'server',
//     component: Layout,
//     redirect: '/server/monitor/index',
//     meta: {
//       title: '智慧服务',
//       remixIcon: 'error-warning-line',
//     },
//     children: [
//       {
//         path: 'monitor',
//         name: '监控地图',
//         component: () => import('@/views/server/monitor/index'),
//         meta: {
//           title: '监控地图',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'siteDetails',
//         name: '站点详情',
//         component: () => import('@/views/server/siteDetails/index'),
//         meta: {
//           title: '站点详情',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'monitorVideo',
//         name: '视频监控',
//         component: () => import('@/views/server/monitorVideo/index'),
//         meta: {
//           title: '设备管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'assets',
//         name: '资产管理',
//         component: () => import('@/views/server/assets/index'),
//         meta: {
//           title: '资产管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//     ],
//   },
//   {
//     path: '/analysis',
//     name: 'analysis',
//     component: Layout,
//     redirect: '/analysis/dfunction/index',
//     meta: {
//       title: '数据分析',
//       remixIcon: 'error-warning-line',
//     },
//     children: [
//       {
//         path: 'monitor',
//         name: '日运行报表',
//         component: () => import('@/views/analysis/dfunction/index'),
//         meta: {
//           title: '日运行报表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'water',
//         name: '日水量统计表',
//         component: () => import('@/views/analysis/water/index'),
//         meta: {
//           title: '日水量统计表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'weekfunction',
//         name: '周运行报表',
//         component: () => import('@/views/analysis/weekfunction/index'),
//         meta: {
//           title: '周运行报表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'mfunction',
//         name: '月运行报表',
//         component: () => import('@/views/analysis/mfunction/index'),
//         meta: {
//           title: '月运行报表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'facilitiesfunction',
//         name: '月度设施运行率统计',
//         component: () => import('@/views/analysis/facilitiesfunction/index'),
//         meta: {
//           title: '月度设施运行率统计',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'workmanship',
//         name: '工艺报表',
//         component: () => import('@/views/analysis/workmanship/index'),
//         meta: {
//           title: '工艺报表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'equipmentfunction',
//         name: '设备报表',
//         component: () => import('@/views/analysis/equipmentfunction/index'),
//         meta: {
//           title: '设备报表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'energy',
//         name: '能耗报表',
//         component: () => import('@/views/analysis/energy/index'),
//         meta: {
//           title: '能耗报表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//     ],
//   },
//   {
//     path: '/maintenance',
//     name: 'maintenance',
//     component: Layout,
//     redirect: '/maintenance/patrol/index',
//     meta: {
//       title: '智慧运维',
//       remixIcon: 'error-warning-line',
//     },
//     children: [
//       {
//         path: 'monitor',
//         name: '巡查巡检',
//         component: () => import('@/views/maintenance/patrol/index'),
//         meta: {
//           title: '巡查巡检',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'facility',
//         name: '设施维保',
//         component: () => import('@/views/maintenance/facility/index'),
//         meta: {
//           title: '设施维保',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'team',
//         name: '班组管理',
//         component: () => import('@/views/maintenance/team/index'),
//         meta: {
//           title: '班组管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'workorder',
//         name: '工单管理',
//         component: () => import('@/views/maintenance/workorder/index'),
//         meta: {
//           title: '工单管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'problemReporting ',
//         name: '问题上报',
//         component: () => import('@/views/maintenance/problemReporting/index'),
//         meta: {
//           title: '问题上报',
//           remixIcon: 'error-warning-line',
//         },
//       },
//     ],
//   },
//   {
//     path: '/iot',
//     name: 'iot',
//     component: Layout,
//     redirect: '/iot/index',
//     meta: {
//       title: '物联平台',
//       remixIcon: 'error-warning-line',
//     },
//     children: [
//       {
//         path: 'grouping',
//         name: '项目分组',
//         component: () => import('@/views/iot/grouping/index'),
//         meta: {
//           title: '项目分组',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'project',
//         name: '项目管理',
//         component: () => import('@/views/iot/project/index'),
//         meta: {
//           title: '项目管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'device',
//         name: '设备管理',
//         component: () => import('@/views/iot/device/index'),
//         meta: {
//           title: '设备管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'alarmuser/index',
//         name: '报警联系人',
//         component: () => import('@/views/iot/alarmuser/index'),
//         meta: {
//           title: '报警联系人',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'trigger/index',
//         name: '触发器管理',
//         component: () => import('@/views/iot/trigger/index'),
//         meta: {
//           title: '触发器管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       // {
//       //   path: 'trigger',
//       //   name: '添加触发器',
//       //   component: () => import('@/views/iot/trigger'),
//       //   meta: {
//       //     title: '添加触发器',
//       //     remixIcon: 'error-warning-line',
//       //   },
//       // },
//       {
//         path: 'sensor',
//         name: 'sensor',
//         hidden: true,
//         component: () => import('@/views/iot/sensor/index'),
//         meta: {
//           title: '传感器管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'sensordata',
//         name: 'sensordata',
//         hidden: true,
//         component: () => import('@/views/iot/sensordata/index'),
//         meta: {
//           title: '传感器数据',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'dictdata1',
//         name: 'dictdata',
//         hidden: true,
//         component: () => import('@/views/set/develop/dictdata/index'),
//         meta: {
//           title: '字典数据',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       // {
//       //   path: 'group',
//       //   name: '组态',
//       //   component: () => import('@/views/iot/group/index'),
//       //   meta: {
//       //     title: '组态',
//       //     remixIcon: 'error-warning-line',
//       //   },
//       // },
//     ],
//   },
//   {
//     path: '/party',
//     component: Layout,
//     redirect: 'noRedirect',
//     name: 'party',
//     alwaysShow: true,
//     meta: {
//       title: '第三方API',
//       remixIcon: 'error-warning-line',
//     },
//     children: [
//       // {
//       //   path: 'gis',
//       //   name: 'gis',
//       //   component: () => import('@/views/party/gis/index'),
//       //   meta: {
//       //     title: '车辆GIS',
//       //     remixIcon: 'error-warning-line',
//       //   },
//       // },
//       {
//         path: 'fluorite',
//         name: 'fluorite',
//         component: () => import('@/views/party/fluorite/index'),
//         meta: {
//           title: '萤石云',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'flow',
//         name: 'flow',
//         component: () => import('@/views/party/flow/index'),
//         meta: {
//           title: '流量卡',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'fluoriteSensorData',
//         name: 'fluoriteSensorData',
//         hidden: true,
//         component: () => import('@/views/party/fluorite/fluoriteSensorData'),
//         meta: {
//           title: '监控视频',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'videoData',
//         name: 'videoData',
//         hidden: true,
//         component: () => import('@/views/party/fluorite/videoData'),
//         meta: {
//           title: '设备列表',
//           remixIcon: 'error-warning-line',
//         },
//       },
//     ],
//   },
//   {
//     path: '/set',
//     component: Layout,
//     redirect: 'noRedirect',
//     name: 'Set',
//     alwaysShow: true,
//     meta: {
//       title: '系统设置',
//       remixIcon: 'error-warning-line',
//     },
//     children: [
//       {
//         path: 'set',
//         name: 'Set',
//         component: () => import('@/views/set/set/index'),
//         meta: {
//           title: '系统设置',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'manage',
//         name: 'Manage',
//         component: () => import('@/views/set/manage/index'),
//         meta: {
//           title: '用户管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'global',
//         name: 'Global',
//         component: () => import('@/views/set/global/index'),
//         meta: {
//           title: '全局设置',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'material',
//         name: 'Material',
//         component: () => import('@/views/set/material/index'),
//         meta: {
//           title: '素材管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'develop',
//         name: 'Develop',
//         component: () => import('@/views/set/develop/index'),
//         meta: {
//           title: '开发管理',
//           remixIcon: 'error-warning-line',
//         },
//       },
//       {
//         path: 'user',
//         name: 'user',
//         component: () => import('@/views/set/user/index'),
//         meta: {
//           title: '个人中心',
//           remixIcon: 'error-warning-line',
//         },
//       },
//     ],
//   },
//   {
//     path: '/:pathMatch(.*)*',
//     redirect: '/404',
//     hidden: true,
//   },
// ];

export const asyncRoutes = [];
const router = createRouter({
  history: isHashRouterMode ? createWebHashHistory() : createWebHistory(),
  routes: constantRoutes,
});

export function addRouter(routes) {
  // const menuslist = menus(routes)
  routes.forEach(route => {
    if (!router.hasRoute(route.name)) router.addRoute(route);
    if (route.children) addRouter(route.children);
  });
}

export function resetRouter(routes = constantRoutes) {
  const names = getNames(routes);
  router.getRoutes().forEach(route => {
    if (route.name && !names.includes(route.name))
      router.removeRoute(route.name);
  });
  addRouter(routes);
}

export function setupRouter(app) {
  app.use(router);
  setupGuard(router);
}
export function setRouterMenus(menu) {
  const menuslist = handleMenu(menu);
  for (let i = 0; i < menuslist.length; i++) {
    asyncRoutes.push(menuslist[i]);
  }
  asyncRoutes.push({
    path: '/:pathMatch(.*)*',
    redirect: '/404',
    hidden: true,
  });
  const newRouter = createRouter({
    history: isHashRouterMode ? createWebHashHistory() : createWebHistory(),
    routes: asyncRoutes,
  });
  router.matcher = newRouter.options; // reset router
}
export function delRouterMenus() {
  const asyncRoutes = [];
  const newRouter = createRouter({
    history: isHashRouterMode ? createWebHashHistory() : createWebHistory(),
    routes: asyncRoutes,
  });
  router.matcher = newRouter.options; // reset router
}
export default router;
