import Vue from 'vue'
import Router from 'vue-router'
import store from './store.js'
// Public
import Login from './views/public/Login.vue'
import Protected from './views/public/ProtectedPage.vue'
import Home from './views/public/Home.vue'
import Secciones from './views/public/Secciones.vue'
import Categorias from './views/public/Categorias.vue'
import CategoriasArchivos from './views/public/CategoriasArchivos.vue'
import Loading from './views/public/Loading.vue'
// Admin
import Admin from './views/admin/Admin.vue'
import HomeAdmin from './views/admin/HomeAdmin.vue'
import EstantesAdmin from './views/admin/EstantesAdmin.vue'
import SeccionesAdmin from './views/admin/SeccionesAdmin.vue'
import CategoriasAdmin from './views/admin/CategoriasAdmin.vue'
import UsuariosAdmin from './views/admin/UsuariosAdmin.vue'
import ArchivosAdmin from './views/admin/ArchivosAdmin.vue'

Vue.use(Router)
const router = new Router({
  mode: 'history',
  //  base: 'QA/quiosco',
  routes: [
    {
      path: '/admin/',
      component: Admin,
      children: [
        {
          path: '',
          name: 'homeAdmin',
          component: HomeAdmin,
          meta: {
            title:'Administrador - S&P ',
            requiresAuth: true,
            canViewCol: true
          }
        },
        {
          path: 'estantesAdmin',
          name: 'estantesAdmin',
          component: EstantesAdmin,
          meta: {
            title:'Administrar Estantes - S&P ',
            requiresAuth: true,
            canViewCol: false
          }
        },
        {
          path: 'seccionesAdmin',
          name: 'seccionesAdmin',
          component: SeccionesAdmin,
          meta: {
            title:'Administrar Secciones - S&P ',
            requiresAuth: true,
            canViewCol: false
          }
        },
        {
          path: 'categoriasAdmin',
          name: 'categoriasAdmin',
          component: CategoriasAdmin,
          meta: {
            title:'Administrar Categorías - S&P ',
            requiresAuth: true,
            canViewCol: false
          }
        },
        {
          path: 'usuariosAdmin',
          name: 'usuariosAdmin',
          component: UsuariosAdmin,
          meta: {
            title:'Administrar Usuarios - S&P ',
            requiresAuth: true,
            canViewCol: false
          }
        },
        {
          path: 'archivosAdmin',
          name: 'archivosAdmin',
          component: ArchivosAdmin,
          meta: {
            title:'Administrar Archivos - S&P ',
            requiresAuth: true,
            canViewCol: true
          }
        }
      ]
    },
    {
      path: '/loading/:datos',
      name: 'loading',
      component: Loading,
      meta: {
        title:'Cargando... '
      }
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
      meta: {
        title:'Iniciar Sesión '
      }
    },
    {
      path: '/',
      name: 'home',
      component: Home,
      meta: {
        title:'Estantes - Quiosco S&P ',
        requiresAuth: true,
        canViewCol: true
      }
    },
    {
      path: '/division/:est/',
      name: 'estantes',
      component: Secciones,
      meta: {
        title:'Secciones - Quiosco S&P ',
        requiresAuth: true,
        canViewCol: true
      }
    },
    {
      path: '/division/:est/:sec',
      name: 'seccion',
      component: Categorias,
      meta: {
        title:'Categorías - Quiosco S&P ',
        requiresAuth: true,
        canViewCol: true
      }
    },
    {
      path: '/division/:est/:sec/:cat',
      name: 'categoria',
      component: CategoriasArchivos,
      meta: {
        title:'Archivos - Quiosco S&P ',
        requiresAuth: true,
        canViewCol: true
      }
    },
    {
      path: '/401',
      name: '401',
      component: Protected,
      meta: {
        title:'Error 404 - Quiosco S&P ',
        requiresAuth: false,
        canViewCol: true
      }
    },
    {
      path: '*',
      redirect: { name: 'home' },
      meta: {
        requiresAuth: true,
        canViewCol: true
      }
    }
  ]
})
router.beforeEach((to, _from, next) => {
  
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
  const canViewCol = to.matched.some(record => record.meta.canViewCol)
  const role = store.getters.user.role
  const currenUser = store.getters.user.name
  document.title = to.meta.title

  if (requiresAuth) {
    // Si no esta auth
    if (currenUser === '') {

      return next({
        name: 'loading',
        params: { datos: 'error' }
      })
    }
    if (role === 'colaborador') {
      // Si el colaborador no tiene permiso de ver la vista
      if (!canViewCol) {
        return next({ name: '401' })
      }
      if (to.name === 'homeAdmin') {
        return next({ name: 'archivosAdmin' })
      }
    }
    return next()
  } else {
    return next()
  }
})
export default router
