import { route } from 'quasar/wrappers';
import {
  createMemoryHistory,
  createRouter,
  createWebHashHistory,
  createWebHistory,
} from 'vue-router';
import { Dialog } from 'quasar'

import routes from './routes';
import { useAuthStore } from 'stores/useAuthStore';
/*
 * 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.
 */

const createHistory = process.env.SERVER
? createMemoryHistory
: (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);

const routerInstance = 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.VUE_ROUTER_BASE),
});

export default route(function (/* { store, ssrContext } */) {

  routerInstance.beforeEach(async (to, from) => {
      // clear alert on route change
      //const alertStore = useAlertStore();
      //alertStore.clear();

      // redirect to login page if not logged in and trying to access a restricted page
      const loginPage = '/login';
      const publicPages = [loginPage];
      const authRequired = !publicPages.includes(to.path);
      const authStore = useAuthStore();

      if (authRequired && !authStore.token) {
          authStore.returnUrl = to.fullPath;
          return '/login';
      }

      if (authStore.token && to.path === loginPage) {
        return from.path == '/' ? '/' : false;
      }

      // redirect to domain setting page if no domain exist
      const domainPages = [...publicPages, '/domain', '/userDomain', '/user', '/role'];
      if (!authStore.hasDomain && !domainPages.includes(to.path)) {
        Dialog.create({
          title: '注意',
          message: '既定/利用可能な接続先はありません。<br>接続先管理ページに遷移して処理します。',
          html: true,
          persistent: true,
        })
        return '/domain';
      }
  });
  return routerInstance;
});

export const router = routerInstance;


// const createHistory = process.env.SERVER
//      ? createMemoryHistory
//      : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);

// export 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.VUE_ROUTER_BASE),
//     });

// export default route(function (/* { store, ssrContext } */) {
//      return Router;
//     });



