import React, { createContext, useContext, useState, useCallback } from 'react'; import { preferencesService, UserPreferences } from '../services/preferencesService'; interface PreferencesContextValue { preferences: UserPreferences; updatePreference: ( key: K, value: UserPreferences[K] ) => void; resetPreferences: () => void; } const PreferencesContext = createContext(undefined); export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [preferences, setPreferences] = useState(() => { // Load preferences synchronously on mount return preferencesService.getAllPreferences(); }); const updatePreference = useCallback( (key: K, value: UserPreferences[K]) => { preferencesService.setPreference(key, value); setPreferences((prev) => ({ ...prev, [key]: value, })); }, [] ); const resetPreferences = useCallback(() => { preferencesService.clearAllPreferences(); setPreferences(preferencesService.getAllPreferences()); }, []); return ( {children} ); }; export const usePreferences = (): PreferencesContextValue => { const context = useContext(PreferencesContext); if (!context) { throw new Error('usePreferences must be used within a PreferencesProvider'); } return context; };