import { ref } from 'vue' import { currentUser as apiCurrentUser, login as apiLogin, loginWithPassword as apiLoginWithPassword, logout as apiLogout } from '@/api/auth' import { api } from '@/api/client' 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() { async function fetchHouseholds(): Promise { const res = await api.GET('/api/v1/users/me/households', { params: {} }) const list = Array.isArray(res.data) ? res.data : [] const hs: Household[] = list.map((h) => ({ id: h.id, name: h.name, slug: h.slug })) setHouseholds(hs) return hs } return { user, households, activeHousehold, loadUser, login, loginWithPassword, logout, setHouseholds, setActiveHousehold, fetchHouseholds } }