/** 引入类型 */

/** 引入路由相关的资源 */
import router, { modules } from './index'
/** 引入vuex实例 */
import store from '@/store'
/** 引入后端路由控制器 */
import { isBackMenu } from '@/config'

/** 引入纯前端路由 */
import FrontRoutes from './permission/front'
/** 引入后端路由 */
import getMenu from './permission/back'

import Layout from '@/layout/index.vue'
import { createNameComponent } from './createNode'

/** 
 * @name 动态路由的权限新增，供登录后调用
 * @other 如果需要进行后端接口控制菜单的话，请在此拿到后端的菜单树与asyncRoutes对比，生成一个新的值
 */
async function addRoutes() {
  // 已验证完成，下面代码添加的可以实时同步至菜单中去，可以添加setTimeout(() => {}) 模拟异步代码的操作
  // 利用前端路由表模拟后端数据问题
  // 等待后端接口返回数据后再回调出去，防止刷新跳转404
  return new Promise((resolve) => {
    if (isBackMenu) {
      getMenu()
      .then((data) => {
        data.forEach(item => {
          modules.push(item)
          router.addRoute(item)
        })
        resolve()
      })
      return
    }    
    FrontRoutes.forEach(item => {
      modules.push(item)
      router.addRoute(item)
    })
    resolve()
  })
}

/**
 * @des 登录了之后会执行这个方法，实现动态路由的功能
 */
export async function getAuthRoutes() {
  // 判断token是否存在，存在则调用添加路由的方法
  if (store.state.user.token) {
    // 判断当前账号是否为推广人员
    if(store.state.user.info.userType === 11) {
      modules.push(...userModule)
      router.addRoute(...userModule)
    } else {
      await addRoutes()
    }
  }
}

//推广人路由权限
const userModule = [
    {
        path: '/userModule',
        redirect: '/userModule/userList/index',
        component: Layout,
        meta: { title: '用户模块', icon: 'iconfont icon-user' },
        children: [
            {
                path: 'userList/index',
                name: 'UserList',
                component: createNameComponent(() => import('@/views/main/userModule/userList.vue')),
                meta: { title: '用户列表' },
            },  
        ],
    },
]
