import { useState, useCallback, useEffect } from 'react' import type { Settings } from '../types/index' const KEY = 'careless-v2-settings' export const PROVIDER_DEFAULTS: Record = { anthropic: { model: 'claude-opus-4-7', maxTokens: 8096 }, openai: { model: 'gpt-5.5-2026-04-23', maxTokens: 8096 }, google: { model: 'gemini-2.5-flash', maxTokens: 8096 }, bedrock: { model: 'global.anthropic.claude-opus-4-7', maxTokens: 60000 }, webllm: { model: 'Qwen2.5-0.5B-Instruct-q4f16_1-MLC', maxTokens: 4096 }, } const DEFAULTS: Settings = { provider: 'anthropic', model: PROVIDER_DEFAULTS.anthropic.model, maxTokens: PROVIDER_DEFAULTS.anthropic.maxTokens, apiKey: '', fontSize: 18, debounceMs: 0, theme: 'dark', enableVision: true, enableMesh: true, enableMemory: true, enableTools: true, bedrockRegion: 'us-west-2', } export function useSettings() { const [settings, setSettings] = useState(() => { try { const raw = localStorage.getItem(KEY) return raw ? { ...DEFAULTS, ...JSON.parse(raw) } : DEFAULTS } catch { return DEFAULTS } }) const updateSettings = useCallback((patch: Partial) => { setSettings(prev => { let next = { ...prev, ...patch } // Auto-flip model + maxTokens when provider changes if (patch.provider && patch.provider !== prev.provider) { const def = PROVIDER_DEFAULTS[patch.provider] if (def) { const prevDef = PROVIDER_DEFAULTS[prev.provider] // If user is on a provider-default model, swap to new provider's default. if (!prev.model || prev.model === prevDef?.model) { next.model = def.model } // Bedrock: enforce 60k floor. Others: swap default if user hadn't customized. if (patch.provider === 'bedrock') { next.maxTokens = Math.max(next.maxTokens ?? 0, def.maxTokens) } else if (!next.maxTokens || next.maxTokens === prevDef?.maxTokens) { next.maxTokens = def.maxTokens } } } try { localStorage.setItem(KEY, JSON.stringify(next)) } catch {} return next }) }, []) useEffect(() => { const onStorage = (e: StorageEvent) => { if (e.key === KEY && e.newValue) { try { setSettings({ ...DEFAULTS, ...JSON.parse(e.newValue) }) } catch {} } } window.addEventListener('storage', onStorage) return () => window.removeEventListener('storage', onStorage) }, []) return { settings, updateSettings } }