import { create } from 'zustand' import { persist, createJSONStorage } from 'zustand/middleware' import { AgentDetails, SessionEntry, TeamDetails, type ChatMessage } from '@/types/os' interface Store { hydrated: boolean setHydrated: () => void streamingErrorMessage: string setStreamingErrorMessage: (streamingErrorMessage: string) => void endpoints: { endpoint: string id__endpoint: string }[] setEndpoints: ( endpoints: { endpoint: string id__endpoint: string }[] ) => void isStreaming: boolean setIsStreaming: (isStreaming: boolean) => void isEndpointActive: boolean setIsEndpointActive: (isActive: boolean) => void isEndpointLoading: boolean setIsEndpointLoading: (isLoading: boolean) => void messages: ChatMessage[] setMessages: ( messages: ChatMessage[] | ((prevMessages: ChatMessage[]) => ChatMessage[]) ) => void chatInputRef: React.RefObject selectedEndpoint: string setSelectedEndpoint: (selectedEndpoint: string) => void agents: AgentDetails[] setAgents: (agents: AgentDetails[]) => void teams: TeamDetails[] setTeams: (teams: TeamDetails[]) => void selectedModel: string setSelectedModel: (model: string) => void mode: 'agent' | 'team' setMode: (mode: 'agent' | 'team') => void sessionsData: SessionEntry[] | null setSessionsData: ( sessionsData: | SessionEntry[] | ((prevSessions: SessionEntry[] | null) => SessionEntry[] | null) ) => void isSessionsLoading: boolean setIsSessionsLoading: (isSessionsLoading: boolean) => void } export const useStore = create()( persist( (set) => ({ hydrated: false, setHydrated: () => set({ hydrated: true }), streamingErrorMessage: '', setStreamingErrorMessage: (streamingErrorMessage) => set(() => ({ streamingErrorMessage })), endpoints: [], setEndpoints: (endpoints) => set(() => ({ endpoints })), isStreaming: false, setIsStreaming: (isStreaming) => set(() => ({ isStreaming })), isEndpointActive: false, setIsEndpointActive: (isActive) => set(() => ({ isEndpointActive: isActive })), isEndpointLoading: true, setIsEndpointLoading: (isLoading) => set(() => ({ isEndpointLoading: isLoading })), messages: [], setMessages: (messages) => set((state) => ({ messages: typeof messages === 'function' ? messages(state.messages) : messages })), chatInputRef: { current: null }, selectedEndpoint: 'https://sifa-classification-agentic-rag-ai.onrender.com', setSelectedEndpoint: (selectedEndpoint) => set(() => ({ selectedEndpoint })), agents: [], setAgents: (agents) => set({ agents }), teams: [], setTeams: (teams) => set({ teams }), selectedModel: '', setSelectedModel: (selectedModel) => set(() => ({ selectedModel })), mode: 'agent', setMode: (mode) => set(() => ({ mode })), sessionsData: null, setSessionsData: (sessionsData) => set((state) => ({ sessionsData: typeof sessionsData === 'function' ? sessionsData(state.sessionsData) : sessionsData })), isSessionsLoading: false, setIsSessionsLoading: (isSessionsLoading) => set(() => ({ isSessionsLoading })) }), { name: 'endpoint-storage', storage: createJSONStorage(() => localStorage), partialize: (state) => ({ selectedEndpoint: state.selectedEndpoint }), onRehydrateStorage: () => (state) => { state?.setHydrated?.() } } ) )