import { create } from 'zustand'; /** * Runtime Store - Connection state and runtime configuration */ export const useRuntimeStore = create((set) => ({ // Connection state isConnected: false, connectionStatus: 'connecting', // 'connecting' | 'connected' | 'disconnected' setIsConnected: (isConnected) => set({ isConnected }), setConnectionStatus: (connectionStatus) => set({ connectionStatus }), // System state systemStatus: 'initializing', // 'initializing' | 'running' | 'completed' currentDate: null, setSystemStatus: (systemStatus) => set({ systemStatus }), setCurrentDate: (currentDate) => set({ currentDate }), // Progress progress: { current: 0, total: 0 }, setProgress: (progress) => set({ progress }), // Server mode serverMode: null, // 'live' | 'backtest' | null setServerMode: (serverMode) => set({ serverMode }), // Market status marketStatus: null, virtualTime: null, setMarketStatus: (marketStatus) => set({ marketStatus }), setVirtualTime: (virtualTime) => set({ virtualTime }), // Data sources dataSources: null, setDataSources: (dataSources) => set({ dataSources }), // Runtime config runtimeConfig: null, setRuntimeConfig: (runtimeConfig) => set({ runtimeConfig }), // Watchlist panel isWatchlistPanelOpen: false, setIsWatchlistPanelOpen: (isWatchlistPanelOpen) => set({ isWatchlistPanelOpen }), // Watchlist draft watchlistDraftSymbols: [], watchlistInputValue: '', watchlistFeedback: null, isWatchlistSaving: false, setWatchlistDraftSymbols: (watchlistDraftSymbols) => set({ watchlistDraftSymbols }), setWatchlistInputValue: (watchlistInputValue) => set({ watchlistInputValue }), setWatchlistFeedback: (watchlistFeedback) => set({ watchlistFeedback }), setIsWatchlistSaving: (isWatchlistSaving) => set({ isWatchlistSaving }), // Runtime settings panel isRuntimeSettingsOpen: false, setIsRuntimeSettingsOpen: (isRuntimeSettingsOpen) => set({ isRuntimeSettingsOpen }), // Runtime config drafts scheduleModeDraft: 'daily', intervalMinutesDraft: '60', triggerTimeDraft: '09:30', maxCommCyclesDraft: '2', initialCashDraft: '100000', marginRequirementDraft: '0', enableMemoryDraft: false, modeDraft: 'live', pollIntervalDraft: '10', startDateDraft: '', endDateDraft: '', enableMockDraft: false, setScheduleModeDraft: (scheduleModeDraft) => set({ scheduleModeDraft }), setIntervalMinutesDraft: (intervalMinutesDraft) => set({ intervalMinutesDraft }), setTriggerTimeDraft: (triggerTimeDraft) => set({ triggerTimeDraft }), setMaxCommCyclesDraft: (maxCommCyclesDraft) => set({ maxCommCyclesDraft }), setInitialCashDraft: (initialCashDraft) => set({ initialCashDraft }), setMarginRequirementDraft: (marginRequirementDraft) => set({ marginRequirementDraft }), setEnableMemoryDraft: (enableMemoryDraft) => set({ enableMemoryDraft }), setModeDraft: (modeDraft) => set({ modeDraft }), setPollIntervalDraft: (pollIntervalDraft) => set({ pollIntervalDraft }), setStartDateDraft: (startDateDraft) => set({ startDateDraft }), setEndDateDraft: (endDateDraft) => set({ endDateDraft }), setEnableMockDraft: (enableMockDraft) => set({ enableMockDraft }), // Runtime config feedback runtimeConfigFeedback: null, isRuntimeConfigSaving: false, setRuntimeConfigFeedback: (runtimeConfigFeedback) => set({ runtimeConfigFeedback }), setIsRuntimeConfigSaving: (isRuntimeConfigSaving) => set({ isRuntimeConfigSaving }), // Last day history (for replay) lastDayHistory: [], setLastDayHistory: (lastDayHistory) => set({ lastDayHistory }), }));