import type { FormSubmitEvent } from "@nuxt/ui"; const isRedirecting = ref(false); export function useAuthConnexion() { const { isLoggedIn } = useAuth(); const toast = useToast(); const { fetch: refreshUserSession } = useUserSession(); const routeRedirect = (useRoute().query.redirect as string) || undefined; // Helper: Redirect after login / logout async function redirectTo(to: string | undefined) { isRedirecting.value = true; await delay(1000); await refreshUserSession(); await navigateTo(to || routeRedirect || "/"); } // Login async function login({ data: body }: FormSubmitEvent, redirect?: string) { try { const { success, message } = await $fetch("/api/login", { method: "POST", body }); if (!success) { throw new Error(message); } toast.add({ title: "Connexion réussie", color: "success", description: message, duration: 3000, }); await redirectTo(redirect); } catch (error) { console.log(error); toast.add({ title: "Erreur de connexion", color: "error", description: error instanceof Error ? error.message : "Une erreur est survenue lors de la connexion.", duration: 5000, }); } } // Logout async function logout(redirect?: string) { try { const result = await $fetch("/api/logout", { method: "POST" }); if (!result.success) { throw new Error("Échec de la déconnexion."); } toast.add({ title: "Déconnexion réussie", color: "success", description: "Vous avez été déconnecté avec succès.", duration: 3000, }); await redirectTo(redirect); } catch (error) { console.log(error); toast.add({ title: "Erreur de déconnexion", color: "error", description: error instanceof Error ? error.message : "Une erreur est survenue lors de la déconnexion.", duration: 5000, }); } } // Dynamic connexion link / icon const connexionButton = computed(() => ({ link: parseAcfLink({ title: isLoggedIn.value ? "Déconnexion" : "Connexion", url: "/connexion", }), icon: isLoggedIn.value ? "i-lucide-log-out" : "i-lucide-log-in", })); return { isRedirecting, login, logout, connexionButton }; }