import { SessionStorage, TouchPan } from "quasar";
import { route } from "quasar/wrappers";
import {
  createMemoryHistory,
  createRouter,
  createWebHashHistory,
  createWebHistory,
} from "vue-router";
import { StateInterface } from "../store";
import routes from "./routes";

/*
 * If not building with SSR mode, you can
 * directly export the Router instantiation;
 *
 * The function below can be async too; either use
 * async/await or return a Promise which resolves
 * with the Router instance.
 */

export default route<StateInterface>(function (/* { store, ssrContext } */) {
  const createHistory = process.env.SERVER
    ? createMemoryHistory
    : process.env.VUE_ROUTER_MODE === "history"
    ? createWebHistory
    : createWebHashHistory;

  const Router = createRouter({
    scrollBehavior: () => ({ left: 0, top: 0 }),
    routes,

    // Leave this as is and make changes in quasar.conf.js instead!
    // quasar.conf.js -> build -> vueRouterMode
    // quasar.conf.js -> build -> publicPath
    history: createHistory(
      process.env.MODE === "ssr" ? void 0 : process.env.VUE_ROUTER_BASE
    ),
  });

  Router.beforeEach((to, from, next) => {
    if ((<any>window).$wujie) {
      if (to.path.endsWith("login")) {
        next("/");
      } else {
        next();
      }
      return;
    }
    if (
      to.meta &&
      (to.meta.permission_level != null ||
        to.meta.permission_level != undefined)
    ) {
      const auth_obj = SessionStorage.getItem("auth")?.toString();
      if (auth_obj) {
        const auth = parseInt(auth_obj);
        const target_auth = parseInt(<string>to.meta.permission_level);
        if (isNaN(target_auth)) {
          next();
          return;
        } else {
          if (auth > target_auth) {
            next();
            return;
          }
        }
      }
    } else {
      next();
      return;
    }

    if (to.path.indexOf("pad") != -1) {
      next("/pad/login");
    } else if (to.path.indexOf("pc") != -1) {
      next("/pc/login");
    } else {
      // next();
    }
  });

  return Router;
});
