import { create } from 'zustand'; import type { Family, Category, User, FamilyMember, Theme, Locale } from '../types'; const getStoredPreferences = () => { const theme = (localStorage.getItem('theme') as Theme) || 'light'; const locale = (localStorage.getItem('locale') as Locale) || 'ru'; return { theme, locale }; }; interface AppState { user: User | null; isAuthenticated: boolean; isLoading: boolean; selectedFamily: Family | null; families: Family[]; categories: Category[]; familyMembers: FamilyMember[]; preferences: { theme: Theme; locale: Locale }; setUser: (user: User | null) => void; setIsLoading: (loading: boolean) => void; setSelectedFamily: (family: Family | null) => void; setFamilies: (families: Family[]) => void; setCategories: (categories: Category[]) => void; setFamilyMembers: (members: FamilyMember[]) => void; setPreferences: (prefs: Partial<{ theme: Theme; locale: Locale }>) => void; logout: () => void; } export const useStore = create((set) => ({ user: null, isAuthenticated: false, isLoading: true, selectedFamily: null, families: [], categories: [], familyMembers: [], preferences: getStoredPreferences(), setUser: (user) => set({ user, isAuthenticated: !!user }), setIsLoading: (isLoading) => set({ isLoading }), setSelectedFamily: (family) => set({ selectedFamily: family }), setFamilies: (families) => set({ families }), setCategories: (categories) => set({ categories }), setFamilyMembers: (familyMembers) => set({ familyMembers }), setPreferences: (prefs) => set((state) => { const newPrefs = { ...state.preferences, ...prefs }; if (prefs.theme) localStorage.setItem('theme', prefs.theme); if (prefs.locale) localStorage.setItem('locale', prefs.locale); return { preferences: newPrefs }; }), logout: () => set({ user: null, isAuthenticated: false, selectedFamily: null, families: [], categories: [], familyMembers: [], }), }));