import permissionRoutes from './module/main-routes.js';
import wmsRoutes from './module/wms-routes.js';
import NProgress from "nprogress";
import store from "@/store";
import router from "@/route/index";
import { inCloudRoute } from "@/tools/router";

/** 路由信息 */
export const generateRoute = (menus) => {
  console.log("generateRoute",menus)
  const userRoutes = menus.map(menu => {
    const { parent, icon, component, children = [], path, hidden = false, title, i18n, id } = menu
    const currentMenu = { path, component, hidden, parent, meta: { key: id, title, i18n, icon }, children: children.length === 0 ? [] : generateRoute(children) }
    if (children.length <= 0) {
      delete currentMenu.children
    }
    return currentMenu
  })
  console.log("generateRoute userRoutes",userRoutes)
  return userRoutes
}

/** 权限信息 */
export const generatePower = (powers) => {
  const userPowers = powers.map(power => {
     return power.code
  })
  return userPowers;
}


// export const setUserRouteComponent = routes => {
//   routes.forEach(r => {
//     r.component = r.parent == '0' ? permissionRoutes.Layout : permissionRoutes[r.component]
//     //会存在 permissionRoutes[r.component]为空的情况
//     if(r.component==undefined){
//       r.component = permissionRoutes['error-404']
//     }
//     if (r.children && r.children.length > 0) {
//       setUserRouteComponent(r.children)
//     }
//   })
// }

export const setUserRouteComponent = routes => {
  routes.forEach(r => {
    r.component = r.parent == '0' ? permissionRoutes.Layout : getPermissionRoutes(r.component)

    if(r.component==undefined){
      r.component = permissionRoutes['error-404']
    }
    if (r.children && r.children.length > 0) {
      setUserRouteComponent(r.children)
    }
  })
}

const getPermissionRoutes = (componentName)=>{
  let route = permissionRoutes[componentName];
  if(route==undefined) route = wmsRoutes[componentName];
  if(route==undefined)route = permissionRoutes['error-404']
  return route;
}

const setDocumentTitle = title => {
  document.title = `WMS - ${title}`
}

/**
 * 前置拦截器
 *
 * @param from
 * @param next
 */
export const permissionController = async (to, from, next) => {

  NProgress.start();
  const { meta: { title = '' } } = to
  setDocumentTitle(title)
  await store.dispatch('app/execCancelToken')

  if (!to.path.includes('login') && !localStorage.getItem('token') && !localStorage.getItem('token_key')) {
    next({path: '/login'})
  } else {
    if (!router.getRoutes().map(it => it.path).includes(to.path)) {
      await store.dispatch('user/addRoute')
      await store.dispatch('user/addPower')
      const userRoutes = JSON.parse(JSON.stringify(store.getters.menu))
      const hasRoute = inCloudRoute(userRoutes, to.path)
      if (hasRoute) {
        setUserRouteComponent(userRoutes)
        userRoutes.forEach(r => { router.addRoute(r) })
        next(to.fullPath)
      } else {
        next('/error/404')
      }
    } else {
      next()
    }
  }
}
