import { createRouter, createWebHistory } from 'vue-router' import { useAuthStore } from '@/stores/auth' import Login from '@/views/Login.vue' import Dashboard from '@/views/Dashboard.vue' const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', redirect: '/dashboard' }, { path: '/login', name: 'Login', component: Login, meta: { requiresAuth: false } }, { path: '/register', name: 'Register', component: () => import('@/views/Register.vue'), meta: { requiresAuth: false } }, { path: '/verify', name: 'VerifyEmail', component: () => import('@/views/VerifyEmail.vue'), meta: { requiresAuth: false } }, { path: '/dashboard', name: 'Dashboard', component: Dashboard, meta: { requiresAuth: true } }, { path: '/spaces', name: 'Spaces', component: () => import('@/views/Spaces.vue'), meta: { requiresAuth: true } }, { path: '/spaces/:id', name: 'SpaceDetail', component: () => import('@/views/SpaceDetail.vue'), meta: { requiresAuth: true } }, { path: '/my-bookings', name: 'MyBookings', component: () => import('@/views/MyBookings.vue'), meta: { requiresAuth: true } }, { path: '/profile', name: 'UserProfile', component: () => import('@/views/UserProfile.vue'), meta: { requiresAuth: true } }, { path: '/admin', name: 'Admin', component: () => import('@/views/Admin.vue'), meta: { requiresAuth: true, requiresAdmin: true } }, { path: '/users', name: 'Users', component: () => import('@/views/Users.vue'), meta: { requiresAuth: true, requiresAdmin: true } }, { path: '/admin/settings', name: 'AdminSettings', component: () => import('@/views/Settings.vue'), meta: { requiresAuth: true, requiresAdmin: true } }, { path: '/admin/pending', name: 'AdminPending', component: () => import('@/views/AdminPending.vue'), meta: { requiresAuth: true, requiresAdmin: true } }, { path: '/admin/audit-log', name: 'AuditLog', component: () => import('@/views/AuditLog.vue'), meta: { requiresAuth: true, requiresAdmin: true } }, { path: '/admin/reports', name: 'AdminReports', component: () => import('@/views/AdminReports.vue'), meta: { requiresAuth: true, requiresAdmin: true } } ] }) // Navigation guard router.beforeEach((to, _from, next) => { const authStore = useAuthStore() if (to.meta.requiresAuth && !authStore.isAuthenticated) { next('/login') } else if (to.meta.requiresAdmin && !authStore.isAdmin) { next('/dashboard') } else if (to.path === '/login' && authStore.isAuthenticated) { next('/dashboard') } else { next() } }) export default router