/** Vue Router configuration */ import { createRouter, createWebHistory } from 'vue-router' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', name: 'splash', component: () => import('@/views/SplashScreen.vue'), }, { path: '/map', name: 'map', component: () => import('@/views/MapView.vue'), }, { path: '/discover', name: 'discover', component: () => import('@/views/DiscoverView.vue'), }, { path: '/business/:id', name: 'business-details', component: () => import('@/views/BusinessDetailsView.vue'), }, { path: '/routes', name: 'routes', component: () => import('@/views/RoutesView.vue'), }, { path: '/schedules', name: 'schedules', component: () => import('@/views/SchedulesView.vue'), }, { path: '/coupons', name: 'coupons', component: () => import('@/views/CouponsView.vue'), }, { path: '/favorites', name: 'favorites', component: () => import('@/views/FavoritesView.vue'), }, { path: '/profile', name: 'profile', component: () => import('@/views/ProfileView.vue'), meta: { requiresAuth: true } }, { path: '/taxi', name: 'taxi', component: () => import('@/views/TaxiView.vue'), }, { path: '/bus-stop/:id', name: 'bus-stop-details', component: () => import('@/views/BusStopDetailsView.vue'), }, { path: '/login', name: 'auth', component: () => import('@/views/AuthView.vue'), }, { path: '/admin', name: 'admin-panel', component: () => import('@/views/AdminPanel.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/bus-stops', name: 'admin-bus-stops', component: () => import('@/views/AdminBusStops.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/routes', name: 'admin-routes', component: () => import('@/views/AdminRoutes.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/reports', name: 'admin-reports', component: () => import('@/views/AdminReports.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/schedules', name: 'admin-schedules', component: () => import('@/views/AdminSchedules.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/drivers', name: 'admin-drivers', component: () => import('@/views/AdminDrivers.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/analytics', name: 'admin-analytics', component: () => import('@/views/StrategicAnalytics.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/taxis', name: 'admin-taxis', component: () => import('@/views/AdminTaxis.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/admin/shuttles', name: 'admin-shuttles', component: () => import('@/views/AdminShuttles.vue'), meta: { requiresAuth: true, role: 'admin' } }, { path: '/promoter', name: 'promoter-dashboard', component: () => import('@/views/PromoterDashboard.vue'), meta: { requiresAuth: true, role: ['PROMOTER', 'ADMIN'] } }, { path: '/driver', name: 'driver-dashboard', component: () => import('@/views/DriverDashboard.vue'), meta: { requiresAuth: true, role: ['DRIVER', 'ADMIN'] } }, ], }) router.beforeEach((to, _from, next) => { const token = localStorage.getItem('auth_token') const role = localStorage.getItem('user_role')?.toUpperCase() if (to.meta.requiresAuth && !token) { next('/login') } else if (to.meta.role) { const allowedRoles = Array.isArray(to.meta.role) ? to.meta.role : [to.meta.role] const hasAccess = allowedRoles.some(r => r.toUpperCase() === role) if (!hasAccess) { if (role === 'ADMIN') next('/admin') else if (role === 'DRIVER') next('/driver') else if (role === 'PROMOTER') next('/promoter') else next('/map') } else { next() } } else { next() } }) export default router