import { create } from 'zustand' import type { ThemeId, Language, GlobalSettings, ActionId } from '@shared/types' import { DEFAULT_AI_CONFIG } from '@shared/types' import { ipcCall } from '@renderer/lib/ipc-client' import { applyTheme } from '@renderer/lib/theme' import i18n from '@renderer/i18n' interface SettingsState extends GlobalSettings { loaded: boolean load: () => Promise update: (partial: Partial) => Promise } export const useSettingsStore = create((set, get) => ({ penName: '未命名作者', onboardingCompleted: false, theme: 'default', language: 'zh-CN', dailyWordGoal: 0, updateSchedule: 'none', stockBufferThreshold: 3, shortcuts: {} as Record, aiConfig: { ...DEFAULT_AI_CONFIG }, namingIgnoreWords: [] as string[], knowledgeAutoSuggest: true, knowledgeSuggestTopN: 8, loaded: false, load: async () => { const data = await ipcCall(() => window.electronAPI.settings.get()) set({ ...data, loaded: true }) applyTheme(data.theme) await i18n.changeLanguage(data.language) }, update: async (partial) => { const data = await ipcCall(() => window.electronAPI.settings.update(partial)) set({ ...get(), ...data }) if (partial.theme) applyTheme(data.theme) if (partial.language) await i18n.changeLanguage(data.language) } }))