import { createRouter, createWebHistory } from 'vue-router' import { useAuthStore } from '@/stores/auth' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', name: 'dashboard', component: () => import('@/views/DashboardView.vue'), meta: { requiresAuth: true }, }, { path: '/files', name: 'files', component: () => import('@/views/FilesView.vue'), meta: { requiresAuth: true }, }, { path: '/files/:path*', name: 'files-path', component: () => import('@/views/FilesView.vue'), meta: { requiresAuth: true }, props: true, }, { path: '/upload', name: 'upload', component: () => import('@/views/UploadView.vue'), meta: { requiresAuth: true }, }, { path: '/settings', name: 'settings', component: () => import('@/views/SettingsView.vue'), meta: { requiresAuth: true }, }, { path: '/login', name: 'login', component: () => import('@/views/LoginView.vue'), meta: { requiresGuest: true }, }, { path: '/about', name: 'about', component: () => import('@/views/AboutView.vue'), }, { path: '/:pathMatch(.*)*', name: 'not-found', component: () => import('@/views/NotFoundView.vue'), }, ], }) // Navigation guards router.beforeEach(async (to, from, next) => { const authStore = useAuthStore() // Initialize auth state if needed if (!authStore.initialized) { await authStore.initializeAuth() } const requiresAuth = to.matched.some(record => record.meta.requiresAuth) const requiresGuest = to.matched.some(record => record.meta.requiresGuest) if (requiresAuth && !authStore.isAuthenticated) { // Redirect to login page next({ name: 'login', query: { redirect: to.fullPath } }) } else if (requiresGuest && authStore.isAuthenticated) { // Redirect authenticated users away from guest pages next({ name: 'dashboard' }) } else { next() } }) export default router