import React, { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { preferencesService, UserPreferences, DEFAULT_PREFERENCES } from '../services/preferencesService'; interface PreferencesContextValue { preferences: UserPreferences; updatePreference: ( key: K, value: UserPreferences[K] ) => Promise; resetPreferences: () => Promise; isLoading: boolean; } const PreferencesContext = createContext(undefined); export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [preferences, setPreferences] = useState(DEFAULT_PREFERENCES); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const loadPreferences = async () => { try { await preferencesService.initialize(); const loadedPreferences = await preferencesService.getAllPreferences(); setPreferences(loadedPreferences); } catch (error) { console.error('Failed to load preferences:', error); // Keep default preferences on error } finally { setIsLoading(false); } }; loadPreferences(); }, []); const updatePreference = useCallback( async (key: K, value: UserPreferences[K]) => { await preferencesService.setPreference(key, value); setPreferences((prev) => ({ ...prev, [key]: value, })); }, [] ); const resetPreferences = useCallback(async () => { await preferencesService.clearAllPreferences(); setPreferences(DEFAULT_PREFERENCES); }, []); return ( {children} ); }; export const usePreferences = (): PreferencesContextValue => { const context = useContext(PreferencesContext); if (!context) { throw new Error('usePreferences must be used within a PreferencesProvider'); } return context; };