import { useEffect } from "react"; import { useSettingsStore } from "../stores/settingsStore"; import { Settings, AudioDevice } from "../lib/types"; interface UseSettingsReturn { // State settings: Settings | null; isLoading: boolean; isUpdating: (key: string) => boolean; audioDevices: AudioDevice[]; outputDevices: AudioDevice[]; audioFeedbackEnabled: boolean; // Actions updateSetting: ( key: K, value: Settings[K], ) => Promise; resetSetting: (key: keyof Settings) => Promise; refreshSettings: () => Promise; refreshAudioDevices: () => Promise; refreshOutputDevices: () => Promise; // Binding-specific actions updateBinding: (id: string, binding: string) => Promise; resetBinding: (id: string) => Promise; // Convenience getters getSetting: (key: K) => Settings[K] | undefined; } export const useSettings = (): UseSettingsReturn => { const store = useSettingsStore(); // Initialize on first mount useEffect(() => { if (store.isLoading) { store.initialize(); } }, [store.initialize, store.isLoading]); return { settings: store.settings, isLoading: store.isLoading, isUpdating: store.isUpdatingKey, audioDevices: store.audioDevices, outputDevices: store.outputDevices, audioFeedbackEnabled: store.settings?.audio_feedback || false, updateSetting: store.updateSetting, resetSetting: store.resetSetting, refreshSettings: store.refreshSettings, refreshAudioDevices: store.refreshAudioDevices, refreshOutputDevices: store.refreshOutputDevices, updateBinding: store.updateBinding, resetBinding: store.resetBinding, getSetting: store.getSetting, }; };