import Vue from 'vue'
import Router from 'vue-router'
import i18n from '@/lang/i18n'
import Cookies from 'js-cookie'

const routerTitle = i18n.routerTitle
const language = Cookies.get('language')

Vue.use(Router)

/* Layout */
import Layout from '@/layout'
// import teamRouter from './modules/team'
// import materialManageRouter from './modules/material-manage'
// import artManageRouter from './modules/art-manage'

/**
 * Note: sub-menu only appear when route children.length >= 1
 * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 *
 * hidden: true                   if set true, item will not show in the sidebar(default is false)
 * alwaysShow: true               if set true, will always show the root menu
 *                                if not set alwaysShow, when item has more than one children route,
 *                                it will becomes nested mode, otherwise not show the root menu
 * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
 * name:'router-name'             the name is used by <keep-alive> (must set!!!)
 * meta : {
    roles: ['admin','editor']    control the page roles (you can set multiple roles)
    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
    icon: 'svg-name'             the icon show in the sidebar
    noCache: true                if set true, the page will no be cached(default is false)
    affix: true                  if set true, the tag will affix in the tags-view
    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
  }
 */

/**
 * constantRoutes
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
export const constantRoutes = [
  {
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)',
        component: () => import('@/views/redirect/index')
      }
    ]
  },
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },
  // {
  //   path: '/',
  //   component: Layout,
  //   redirect: '/dashboard',
  //   children: [
  //     {
  //       path: 'dashboard',
  //       component: () => import('@/views/dashboard/index'),
  //       name: 'Dashboard',
  //       meta: { title: routerTitle.dashboard?.[language] || routerTitle.dashboard.en, icon: 'form', iconPart: 'dashboard', affix: true, required: true, requireToken: true }
  //     }
  //   ]
  // },
  // {
  //   path: '/',
  //   component: () => import('@/views/ChoicePart'),
  //   hidden: true,
  //   meta: { requireToken: true }
  // },
  // {
  //   path: '/auth-redirect',
  //   component: () => import('@/views/login/auth-redirect'),
  //   hidden: true
  // },
  {
    path: '/404',
    component: () => import('@/views/error-page/404'),
    hidden: true
  },
  {
    path: '/401',
    component: () => import('@/views/error-page/401'),
    hidden: true
  },
  {
    path: '/',
    component: Layout,
    redirect: '/ports',
    name: 'basicData',
    meta: { title: routerTitle.basicData?.[language] || routerTitle.basicData.en, icon: 'form', iconPart: 'basicData', affix: true, required: true, requireToken: true },
    children: [
      {
        path: 'ports',
        component: () => import('@/views/basicData/Cache/cache'),
        name: 'ports',
        meta: { title: routerTitle.basicData.ports.ports?.[language] || routerTitle.basicData.ports.ports.en, icon: 'form', affix: true }
      },
      {
        path: 'area',
        component: () => import('@/views/basicData/Cache/area'),
        name: 'area',
        hidden: true,
        meta: { title: routerTitle.basicData.ports.area?.[language] || routerTitle.basicData.ports.area.en, icon: 'form', affix: true }
      },
      {
        path: 'shelf',
        component: () => import('@/views/basicData/Cache/shelf'),
        name: 'shelf',
        hidden: true,
        meta: { title: routerTitle.basicData.ports.shelf?.[language] || routerTitle.basicData.ports.shelf.en, icon: 'form', affix: true }
      }, {
        path: 'cacheAdd',
        component: () => import('@/views/basicData/Cache/components/cache-add'),
        name: 'cacheAdd',
        hidden: true,
        meta: { title: routerTitle.basicData.ports.cacheAdd?.[language] || routerTitle.basicData.ports.cacheAdd.en, icon: 'form', affix: true }
      }, {
        path: 'shelfAdd',
        component: () => import('@/views/basicData/Cache/components/shelf-add'),
        name: 'shelfAdd',
        hidden: true,
        meta: { title: routerTitle.basicData.ports.shelfAdd?.[language] || routerTitle.basicData.ports.shelfAdd.en, icon: 'form', affix: true }
      }, {
        path: 'locationAdd',
        component: () => import('@/views/basicData/Cache/components/location-add'),
        name: 'locationAdd',
        hidden: true,
        meta: { title: routerTitle.basicData.ports.locationAdd?.[language] || routerTitle.basicData.ports.locationAdd.en, icon: 'form', affix: true }
      }, {
        path: 'storageBox',
        component: () => import('@/views/basicData/Cache/storageBox'),
        name: 'storageBox',
        meta: { title: routerTitle.basicData.ports.storageBox?.[language] || routerTitle.basicData.ports.storageBox.en, icon: 'form', affix: true }
      }, {
        path: 'PositionDetailInfo',
        component: () => import('@/views/basicData/Cache/components/PositionDetailInfo'),
        name: 'PositionDetailInfo',
        hidden: true,
        meta: { title: routerTitle.basicData.ports.PositionDetailInfo?.[language] || routerTitle.basicData.ports.PositionDetailInfo.en, icon: 'form', affix: true }
      },
      {
        path: 'equipmentInfo',
        component: () =>
              import('@/views/basicData/Equipment/equipmentInfo'),
        name: 'equipmentInfo',
        meta: { title: routerTitle.basicData.equipment.equipmentInfo?.[language] || routerTitle.basicData.equipment.equipmentInfo.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: 'equipmentInfoAdd',
        component: () => import('@/views/basicData/Equipment/components/equipmentInfo-add'),
        name: 'equipmentInfoAdd',
        hidden: true,
        meta: { title: routerTitle.basicData.equipment.equipmentInfoAdd?.[language] || routerTitle.basicData.equipment.equipmentInfoAdd.en, icon: 'form', affix: true, required: true, requireToken: true }
      }
    ]
  },
  {
    path: '/Warehouse',
    component: Layout,
    redirect: '/Warehouse/workOrderManage',
    name: 'Warehouse',
    meta: { title: routerTitle.Warehouse?.[language] || routerTitle.Warehouse.en, icon: 'form', iconPart: 'orderManage', affix: true, required: true, requireToken: true },
    children: [
      {
        path: '/StorageBoxInfo',
        component: () =>
          import('@/views/basicData/Warehouse/StorageBoxInfo'),
        name: 'StorageBoxInfo',
        meta: { title: routerTitle.Warehouse.StorageBoxInfo?.[language] || routerTitle.Warehouse.StorageBoxInfo.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: '/StorageBoxRack',
        component: () =>
          import('@/views/basicData/Warehouse/StorageBoxRack'),
        name: 'StorageBoxRack',
        meta: { title: routerTitle.Warehouse.StorageBoxRack?.[language] || routerTitle.Warehouse.StorageBoxRack.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: '/CurrentTask',
        component: () =>
          import('@/views/basicData/Warehouse/CurrentTask'),
        name: 'CurrentTask',
        meta: { title: routerTitle.Warehouse.CurrentTask?.[language] || routerTitle.Warehouse.CurrentTask.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: '/HistoricalTask',
        component: () =>
          import('@/views/basicData/Warehouse/HistoricalTask'),
        name: 'HistoricalTask',
        meta: { title: routerTitle.Warehouse.HistoricalTask?.[language] || routerTitle.Warehouse.HistoricalTask.en, icon: 'form', affix: true, required: true, requireToken: true }
      }
    ]
  },
  {
    path: '/order',
    component: Layout,
    redirect: '/order/ProcessInfo',
    name: 'orderManage',
    meta: { title: routerTitle.order?.[language] || routerTitle.order.en, icon: 'form', iconPart: 'orderManage', affix: true, required: true, requireToken: true },
    children: [
      {
        path: 'ProcessInfo',
        component: () =>
          import('@/views/orderManage/ProcessInfo'),
        name: 'ProcessInfo',
        meta: { title: routerTitle.order.ProcessInfo?.[language] || routerTitle.order.ProcessInfo.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: 'ExecutionInfo',
        component: () =>
          import('@/views/orderManage/ExecutionInfo'),
        name: 'ExecutionInfo',
        meta: { title: routerTitle.order.ExecutionInfo?.[language] || routerTitle.order.ExecutionInfo.en, icon: 'form', affix: true, required: true, requireToken: true }
      }
    ]
  },
  {
  //   path: '/form',
  //   component: Layout,
  //   redirect: '/form',
  //   name: 'formManage',
  //   meta: { title: routerTitle.form?.[language] || routerTitle.form.en, icon: 'form', iconPart: 'formManage', affix: true, required: true, requireToken: true, unuse: false },
  //   children: [{
  //     path: 'report',
  //     component: () => import('@/views/report-manage/ReportSortChoise'),
  //     name: 'Report',
  //     meta: { title: routerTitle.form.report?.[language] || routerTitle.form.report.en, icon: 'form', affix: true, required: true, requireToken: true }
  //   },
  //   {
  //     path: 'report-sort-list',
  //     component: () => import('@/views/report-manage/Report'),
  //     name: 'ReportSortList',
  //     hidden: true,
  //     meta: { title: routerTitle.form.reportSortList?.[language] || routerTitle.form.reportSortList.en, icon: 'form', affix: true, required: true, requireToken: true }
  //   },
  //   {
  //     path: 'report-view',
  //     component: () => import('@/views/report-manage/ReportView'),
  //     name: 'ReportDesign',
  //     meta: { title: routerTitle.form.reportView?.[language] || routerTitle.form.reportView.en, icon: 'form', affix: true, required: true, requireToken: true },
  //     hidden: true
  //   },
  //   {
  //     path: 'report-design',
  //     component: () => import('@/views/report-manage/ReportDesign'),
  //     name: 'ReportDesign',
  //     meta: { title: routerTitle.form.reportDesign?.[language] || routerTitle.form.reportDesign.en, icon: 'form', affix: true, required: true, requireToken: true }
  //   },
  //   {
  //     path: 'report-sort',
  //     component: () => import('@/views/report-manage/ReportSort/index'),
  //     name: 'ReportSort',
  //     meta: { title: routerTitle.form.reportSort?.[language] || routerTitle.form.reportSort.en, icon: 'form', affix: true, required: true, requireToken: true }
  //   }]
  // },
  // {
    path: '/interface',
    component: Layout,
    redirect: '/interface',
    name: 'interfaceManage',
    hidden: true,
    meta: { title: routerTitle.interface?.[language] || routerTitle.interface.en, icon: 'form', iconPart: 'formwhite', affix: true, required: true, requireToken: true, unuse: true },
    children: []
  },
  {
    path: '/dataacquisition',
    component: Layout,
    redirect: '/dataacquisition',
    name: 'dataAcquisitionManage',
    hidden: true,
    meta: { title: routerTitle.dataacquisition?.[language] || routerTitle.dataacquisition.en, icon: 'form', iconPart: 'formwhite', affix: true, required: true, requireToken: true, unuse: true },
    children: []
  },
  {
    path: '/quality',
    component: Layout,
    redirect: '/quality',
    name: 'qualityManage',
    hidden: true,
    meta: { title: routerTitle.quality?.[language] || routerTitle.quality.en, icon: 'form', iconPart: 'qualityManage', affix: true, required: true, requireToken: true },
    children: [
      {
        path: 'scrap',
        component: () => import('@/views/QualityManager/scrap'),
        name: 'scrapManage',
        meta: { title: routerTitle.quality.scrap?.[language] || routerTitle.quality.scrap.en, icon: 'form', iconPart: 'formwhite', affix: true, required: true, requireToken: true, unuse: true }
      },
      {
        path: 'scrapcategorystatistics',
        component: () => import('@/views/QualityManager/scrap/scrapCategoryStatistics'),
        name: 'scrapCategoryStatistics',
        meta: { title: routerTitle.quality.scrapcategorystatistics?.[language] || routerTitle.quality.scrapcategorystatistics.en, icon: 'form', iconPart: 'formwhite', affix: true, required: true, requireToken: true, unuse: true }
      },
      {
        path: 'plan',
        component: () => import('@/views/QualityManager/plan'),
        name: 'PlanManage',
        meta: { title: routerTitle.quality.plan?.[language] || routerTitle.quality.plan.en, icon: 'form', affix: true }
      }, {
        path: 'planparam',
        component: () => import('@/views/QualityManager/plan/subpage/detail'),
        name: 'PlanParamManage',
        hidden: true,
        meta: { title: routerTitle.quality.planform?.[language] || routerTitle.quality.planform.en, icon: 'form', affix: true }
      }, {
        path: 'issue',
        component: () => import('@/views/QualityManager/plan/issuedplan'),
        name: 'PlanIssuedManage',
        meta: { title: routerTitle.quality.issuedplan?.[language] || routerTitle.quality.issuedplan.en, icon: 'form', affix: true }
      },
      {
        path: '/offlineDetec',
        component: () => import('@/views/basicData/index'),
        name: 'offlineDetec',
        meta: { title: routerTitle.quality.offlineDetec?.[language] || routerTitle.quality.offlineDetec.en, icon: 'form', affix: true, required: true, requireToken: true },
        children: [
          {
            path: 'detecParam',
            component: () =>
              import('@/views/QualityManager/offlineDetec/detecParam'),
            name: 'detecParam',
            hidden: true,
            meta: { title: routerTitle.quality.offlineDetec.detecParam?.[language] || routerTitle.quality.offlineDetec.detecParam.detecParam.en, icon: 'form', affix: true, required: true, requireToken: true }
          },
          {
            path: 'detecParamAdd',
            component: () =>
              import('@/views/QualityManager/offlineDetec/components/detecParam-add'),
            name: 'detecParamAdd',
            hidden: true,
            meta: { title: routerTitle.quality.offlineDetec.detecParam?.[language] || routerTitle.quality.offlineDetec.detecParam.detecParam.en, icon: 'form', affix: true, required: true, requireToken: true }
          },
          {
            path: 'equipmentDetectParam',
            component: () =>
              import('@/views/basicData/Equipment/equipmentDetectParam'),
            name: 'equipmentDetectParam',
            hidden: true,
            meta: { title: routerTitle.basicData.equipment.equipmentDetectInfo.equipmentDetectParam?.[language] || routerTitle.basicData.equipment.equipmentDetectInfo.equipmentDetectParam.en, icon: 'form', affix: true, required: true, requireToken: true }
          },
          {
            path: 'equipmentDetectParamAdd',
            component: () =>
              import('@/views/basicData/Equipment/components/equipmentDetectParam-add'),
            name: 'equipmentDetectParamAdd',
            meta: { title: routerTitle.basicData.equipment.equipmentDetectInfo.equipmentDetectParam?.[language] || routerTitle.basicData.equipment.equipmentDetectInfo.equipmentDetectParam.en, icon: 'form', affix: true, required: true, requireToken: true }
          },
          {
            path: 'detecRegistration',
            component: () =>
              import('@/views/QualityManager/offlineDetec/detecRegistration'),
            name: 'detecRegistration',
            meta: { title: routerTitle.quality.offlineDetec.detecRegistration?.[language] || routerTitle.quality.offlineDetec.detecRegistration.en, icon: 'form', affix: true, required: true, requireToken: true }
          }
        ]
      },
      {
        path: '/spc',
        component: () => import('@/views/spc/index'),
        name: 'spcManage',
        meta: { title: routerTitle.spc?.[language] || routerTitle.spc.en, icon: 'form', iconPart: 'formwhite', affix: true, required: true, requireToken: true, openUrl: 'http://58.210.206.230:8000/thirdLogin?username=ZJCadmin&password=123456' }
      },
      {
        path: 'knowledge',
        component: () => import('@/views/QualityManager/base/knowledge'),
        name: 'knowledge',
        meta: { title: routerTitle.quality.knowledge?.[language] || routerTitle.quality.knowledge.en, icon: 'form', iconPart: 'formwhite', affix: true }
      }
    ]
  },
  {
    path: '/basic',
    component: Layout,
    redirect: '/user/manager',
    name: 'ArticleManager',
    hidden: true,
    meta: { title: routerTitle.basic?.[language] || routerTitle.basic.en, icon: 'form', iconPart: 'ArticleManager', affix: true, required: true, requireToken: true },
    children: [
      {
        path: 'usermanage',
        component: () => import('@/views/UserPage/usermanage'),
        name: 'usermanage',
        meta: { title: routerTitle.basic.usermanage?.[language] || routerTitle.basic.usermanage.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: 'rolemanager',
        component: () => import('@/views/RoleManager'),
        name: 'ArticleManager',
        meta: { title: routerTitle.basic.rolemanage?.[language] || routerTitle.basic.rolemanage.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: 'menumanager',
        component: () => import('@/views/MenuManager'),
        name: 'MenuManager',
        hidden: true,
        meta: { title: routerTitle.basic.menumanage?.[language] || routerTitle.basic.menumanage.en, icon: 'form', affix: true, required: true, requireToken: true }
      },
      {
        path: 'manager',
        component: () => import('@/views/OrgManager/manager'),
        name: 'manager',
        meta: { title: routerTitle.basic.orgmanage?.[language] || routerTitle.basic.orgmanage.en, icon: 'form', affix: true, required: true, requireToken: true }
      }
    ]
  },
  { path: '*', redirect: '/404', hidden: true }
]
export const asyncRoutes = [
  // 404 page must be placed at the end !!!
  { path: '*', redirect: '/404', hidden: true }
]

const createRouter = () =>
  new Router({
    // mode: 'history', // require service support
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes
  })

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

// export function resetRouter(dynamicRoutes) {
//   createRouter(constantRoutes.concat(dynamicRoutes))
// }

export default router