import { defineStore } from 'pinia'; import { ref } from 'vue'; import type { ServerInfo, SettingsResponse, UpdateSettingsRequest } from '@arboretum/shared'; import { api } from '../lib/api'; // Réglages serveur (découverte des dépôts, infos serveur). // Les préférences purement client (langue) restent gérées par l'i18n/localStorage. export const useSettingsStore = defineStore('settings', () => { const server = ref(null); const scanRoots = ref([]); const scanIntervalMin = ref(0); const claudeBinPath = ref(null); const claudeHome = ref(null); const retentionDays = ref(0); const purgeDays = ref(0); const loaded = ref(false); const saving = ref(false); function apply(res: SettingsResponse): void { server.value = res.server; scanRoots.value = res.settings.scanRoots; scanIntervalMin.value = res.settings.scanIntervalMin; claudeBinPath.value = res.settings.claudeBinPath; claudeHome.value = res.settings.claudeHome; retentionDays.value = res.settings.retentionDays; purgeDays.value = res.settings.purgeDays; loaded.value = true; } async function fetch(): Promise { apply(await api.get('/api/v1/settings')); } async function save(patch: UpdateSettingsRequest): Promise { saving.value = true; try { apply(await api.patch('/api/v1/settings', patch)); } finally { saving.value = false; } } return { server, scanRoots, scanIntervalMin, claudeBinPath, claudeHome, retentionDays, purgeDays, loaded, saving, fetch, save }; });