import { useState, useCallback, useEffect } from 'react'; import toast from 'react-hot-toast'; import { useAuthenticatedFetch } from './useAuthenticatedFetch'; import type { GameConfig } from '../types'; import { DEFAULT_GAME_CONFIG } from '../types'; interface UseUserConfigReturn { defaultConfig: GameConfig; loading: boolean; saving: boolean; fetchDefaultConfig: () => Promise; saveDefaultConfig: (config: GameConfig) => Promise; } export const useUserConfig = (): UseUserConfigReturn => { const { authFetch, isAuthenticated } = useAuthenticatedFetch(); const [defaultConfig, setDefaultConfig] = useState(DEFAULT_GAME_CONFIG); const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); const fetchDefaultConfig = useCallback(async () => { if (!isAuthenticated) return; setLoading(true); try { const response = await authFetch('/api/users/me'); if (response.ok) { const data = await response.json(); if (data.defaultGameConfig) { setDefaultConfig(data.defaultGameConfig); } } } catch { } finally { setLoading(false); } }, [authFetch, isAuthenticated]); const saveDefaultConfig = useCallback(async (config: GameConfig) => { setSaving(true); try { const response = await authFetch('/api/users/me/default-config', { method: 'PUT', body: JSON.stringify({ defaultGameConfig: config }), }); if (!response.ok) { throw new Error('Failed to save defaults'); } setDefaultConfig(config); toast.success('Default settings saved!'); } catch (err) { const message = err instanceof Error ? err.message : 'Failed to save defaults'; toast.error(message); throw err; } finally { setSaving(false); } }, [authFetch]); useEffect(() => { fetchDefaultConfig(); }, [fetchDefaultConfig]); return { defaultConfig, loading, saving, fetchDefaultConfig, saveDefaultConfig, }; };