import {
  canNavigate
} from '@layouts/plugins/casl';
const loginUrl =
  import.meta.env.VITE_LOGIN_URL;

export const setupGuards = router => {
  // 👉 router.beforeEach
  // Docs: https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards
  router.beforeEach(to => {
    /*
     * If it's a public route, continue navigation. This kind of pages are allowed to visited by login & non-login users. Basically, without any restrictions.
     * Examples of public routes are, 404, under maintenance, etc.
     */
    if (to.meta.public)
      return

    /**
     * Check if user is logged in by checking if token & user data exists in local storage
     * Feel free to update this logic to suit your needs
     */
    const isLoggedIn = !!(useCookie('userData').value && useCookie('accessToken').value)

    /*
          If user is logged in and is trying to access login like page, redirect to home
          else allow visiting the page
          (WARN: Don't allow executing further by return statement because next code will check for permissions)
         */
    if (to.meta.unauthenticatedOnly) {
      if (isLoggedIn)
        return '/'
      else
        return undefined
    }
    // if (!canNavigate(to)) {
    //   /* eslint-disable indent */
    //   return isLoggedIn ? {
    //     name: 'not-authorized'
    //   } : {
    //     name: 'login',
    //     query: {
    //       ...to.query,
    //       to: to.fullPath !== '/' ? to.path : undefined,
    //     },
    //   }
    //   /* eslint-enable indent */
    // }
    if (!canNavigate(to)) {
      if (isLoggedIn) {
        return {
          name: 'not-authorized'
        };
      } else {
        window.location.href = loginUrl;
        return false;
      }
    }
  })
}
