export default defineNuxtRouteMiddleware(async (to) => {
    const auth = useAuthStore()
    const isLogin = to.path === '/login'

    if (!auth.checked) {
        await auth.ensureSession()
    }

    if (!isLogin && !auth.isAuthenticated) {
        return navigateTo('/login')
    }

    if (isLogin && auth.isAuthenticated) {
        return navigateTo('/')
    }

    if (auth.isAuthenticated) {
        const { loaded: sidebarLoaded, loadSidebar } = useSidebar()
        const { loaded: modulesLoaded, loadModules } = useModules()

        // Chargement parallele sidebar + modules actifs : les deux sont
        // consommes par layouts/default.vue (sidebar pour la nav, modules
        // pour conditionner le SiteSelector). Charger en parallele evite
        // le flash au premier paint de la barre.
        await Promise.all([
            sidebarLoaded.value ? Promise.resolve() : loadSidebar(),
            modulesLoaded.value ? Promise.resolve() : loadModules(),
        ])
    }
})
