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<User | null>(null)
const households = ref<Household[]>([])
const activeHousehold = ref<Household | null>(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)
export async function loginWithPassword(email: string, password: string) {
user.value = await apiLoginWithPassword(email, password)
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) {
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 }