import { ref } from 'vue' import { currentUser as apiCurrentUser, login as apiLogin, loginWithPassword as apiLoginWithPassword, logout as apiLogout } from '@/api/auth' import type { User } from '@/domain/types' type Household = { id: number; name: string; slug: string } const user = ref(null) const households = ref([]) const activeHousehold = ref(null) let initialized = false export async function loadUser() { if (!initialized) { user.value = await apiCurrentUser() initialized = true } return user.value } export async function login(username: string) { user.value = await apiLogin(username) return user.value } export async function loginWithPassword(email: string, password: string) { user.value = await apiLoginWithPassword(email, password) return user.value } export async function logout() { await apiLogout() user.value = null households.value = [] activeHousehold.value = null } export function setHouseholds(hs: Household[]) { households.value = Array.isArray(hs) ? hs.slice() : [] } export function setActiveHousehold(h: Household | string | null) { if (h == null) { activeHousehold.value = null return } if (typeof h === 'string') { activeHousehold.value = households.value.find((x) => x.slug === h) ?? null } else { activeHousehold.value = h } } export function useAuth() { return { user, households, activeHousehold, loadUser, login, loginWithPassword, logout, setHouseholds, setActiveHousehold } }