import { create } from 'zustand'; import { fetchUserSyncBootstrap, pushUserSyncPartner, pushUserSyncPreferences, } from '@/lib/user-sync'; import { useAuthStore } from '@/stores/auth'; import { usePartnerProfilesStore } from '@/stores/partner-profiles'; import { useProviderStore } from '@/stores/providers'; import { useSettingsStore } from '@/stores/settings'; import type { UserSyncPartner, UserSyncPreferences } from '../../shared/user-sync'; type UserSyncState = { loading: boolean; error: string | null; lastSyncedAt: string | null; bootstrap: () => Promise; pushPreferences: (preferences: UserSyncPreferences) => Promise; pushPartner: (partner: UserSyncPartner) => Promise; }; export const useUserSyncStore = create((set) => ({ loading: false, error: null, lastSyncedAt: null, bootstrap: async () => { const accessToken = await useAuthStore.getState().getValidAccessToken(); if (!accessToken) return; set({ loading: true, error: null }); try { const bootstrap = await fetchUserSyncBootstrap(accessToken); useSettingsStore.getState().applySyncedPreferences(bootstrap.preferences); usePartnerProfilesStore.getState().applySyncedPartners(bootstrap.partners); await useProviderStore.getState().refreshProviderSnapshot(); set({ loading: false, lastSyncedAt: new Date().toISOString(), error: null }); } catch (error) { set({ loading: false, error: error instanceof Error ? error.message : String(error), }); } }, pushPreferences: async (preferences) => { const accessToken = await useAuthStore.getState().getValidAccessToken(); if (!accessToken) return; try { await pushUserSyncPreferences(accessToken, preferences); set({ lastSyncedAt: new Date().toISOString(), error: null }); } catch (error) { set({ error: error instanceof Error ? error.message : String(error) }); } }, pushPartner: async (partner) => { const accessToken = await useAuthStore.getState().getValidAccessToken(); if (!accessToken) return; try { await pushUserSyncPartner(accessToken, partner); set({ lastSyncedAt: new Date().toISOString(), error: null }); } catch (error) { set({ error: error instanceof Error ? error.message : String(error) }); } }, }));