import { create } from 'zustand'; import { persist, createJSONStorage } from 'zustand/middleware'; import { settingsSchema, type Settings } from '@/lib/validators'; type SettingsLeaf = keyof Omit; interface SettingsState extends Settings { setSetting: (key: K, value: Settings[K]) => void; resetToDefaults: () => void; } const DEFAULTS = settingsSchema.parse({}); export const useSettingsStore = create()( persist( (set) => ({ ...DEFAULTS, setSetting: (key, value) => set((s) => ({ ...s, [key]: value }) as Partial), resetToDefaults: () => set(() => ({ ...DEFAULTS })), }), { name: 'mc-settings-store', storage: createJSONStorage(() => localStorage), partialize: (state) => { const { setSetting, resetToDefaults, ...rest } = state; return rest; }, onRehydrateStorage: () => (state) => { if (!state) return; const result = settingsSchema.safeParse(state); if (!result.success) { console.warn('[settings-store] invalid persisted state, resetting to defaults', result.error); useSettingsStore.setState({ ...DEFAULTS } as any); } }, } ) );