"use client"; import { create } from "zustand"; import { getService } from "./online/service"; import { AuthSession, UserProfile } from "./online/types"; interface SessionStore { session: AuthSession | null; profile: UserProfile | null; loading: boolean; isAuthed: boolean; init: () => Promise; refreshProfile: () => Promise; setProfile: (p: UserProfile) => void; requestOtp: (phone: string) => Promise<{ devCode?: string }>; verifyOtp: (phone: string, code: string) => Promise; signInEmail: (email: string, password: string) => Promise; signUpEmail: (email: string, password: string, name: string) => Promise; signInGoogle: () => Promise; signOut: () => Promise; updateProfile: ( patch: Partial> ) => Promise; upgradePlan: () => Promise; } export const useSessionStore = create((set, get) => ({ session: null, profile: null, loading: true, isAuthed: false, init: async () => { const svc = getService(); const restored = await svc.restore(); if (restored) { set({ session: restored.session, profile: restored.profile, isAuthed: true, loading: false }); } else { // ensure a (guest) profile exists so the top bar can render const profile = await svc.getProfile(); set({ profile, isAuthed: false, loading: false }); } }, refreshProfile: async () => { const profile = await getService().getProfile(); set({ profile }); }, setProfile: (p) => set({ profile: p }), requestOtp: (phone) => getService().requestOtp(phone), verifyOtp: async (phone, code) => { const session = await getService().verifyOtp(phone, code); const profile = await getService().getProfile(); set({ session, profile, isAuthed: true }); }, signInEmail: async (email, password) => { const session = await getService().signInEmail(email, password); const profile = await getService().getProfile(); set({ session, profile, isAuthed: true }); }, signUpEmail: async (email, password, name) => { const session = await getService().signUpEmail(email, password, name); const profile = await getService().getProfile(); set({ session, profile, isAuthed: true }); }, signInGoogle: async () => { const session = await getService().signInGoogle(); const profile = await getService().getProfile(); set({ session, profile, isAuthed: true }); }, signOut: async () => { await getService().signOut(); set({ session: null, isAuthed: false }); }, updateProfile: async (patch) => { const profile = await getService().updateProfile(patch); set({ profile }); }, upgradePlan: async () => { const profile = await getService().upgradePlan(); set({ profile }); }, }));