import router from './index';
import store from '@/store/index';
import {
  Message
} from 'element-ui';
import {
  getToken
} from '@/utils/auth';

const whiteRoutes = ["/login", "/redirect", "/register"];

// 路由前置守卫
router.beforeEach((to, from, next) => {
  to.meta?.title && (document.title = to.meta.title);
  // 从cookie中获取token
  if (getToken()) {
    /**
     * 判断前往的path是否为登录页
     * 是重定向
     * 否则根据用户基本信息 获取当前状态
     */
    // 没有用户身份id 拉取信息 有则 是否去往登录页 是则重定向
    if (!store.state.user.userInfo?.userId) {
      store.dispatch("user/getUserInfo").then(res => {
        store.dispatch("routerModule/createRouter", "1").then(routes => {
          routes.forEach(route => {
            router.addRoute(route);
          });
          next({
            ...to,
            replace: true
          });
        });
      })
        .catch(err => {
          Message.error(err.msg || "获取用户信息失败!");
          store.dispatch('user/loginOut').finally(() => {
            location.href = '/login';
          });
        });
    } else {
      if (to.path === "/login") {
        next({ path: "/home", replace: true });
      } else {
        next();
      }
    }
  } else {
    /**
     * 判断当前前往页面是否需要token
     * 不匹配 以及 未带token重定向到登录页
     */
    if (whiteRoutes.includes(to.path)) {
      next();
    } else {
      next({
        path: "/login"
      });
    }
  }
});