import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { supabase } from '@/supabase' export const useAuthStore = defineStore('auth', () => { const userSession = ref(null) const userProfile = ref(null) const isAuthenticated = computed(() => !!userSession.value) // We check the custom Postgres role we put in our `users` table const role = computed(() => userProfile.value?.role || userSession.value?.user?.user_metadata?.role) const userName = computed(() => userProfile.value?.full_name || userSession.value?.user?.user_metadata?.full_name) const isAdmin = computed(() => role.value?.toUpperCase() === 'ADMIN') const isDriver = computed(() => role.value?.toUpperCase() === 'DRIVER') const isPromoter = computed(() => role.value?.toUpperCase() === 'PROMOTER') const isPassenger = computed(() => !role.value || role.value?.toUpperCase() === 'PASSENGER') /** Listens for Supabase Auth state changes */ supabase.auth.onAuthStateChange(async (_event, session) => { userSession.value = session if (session?.user) { // Immediately fetch their role from standard Public table if present const { data } = await supabase .from('users') .select('*') .eq('id', session.user.id) .single() if (data) userProfile.value = data } else { userProfile.value = null } }) async function login(email: string, pass: string) { // Use standard Supabase signIn const { error } = await supabase.auth.signInWithPassword({ email, password: pass }) if (error) throw new Error(error.message) } async function logout() { await supabase.auth.signOut() userSession.value = null userProfile.value = null window.location.href = '/' } return { userSession, userProfile, role, userName, isAuthenticated, isAdmin, isDriver, isPromoter, isPassenger, login, logout } })