1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
4import { create } from 'zustand';
6export type SimulationProgressState = {
10 details?: SimulationProgressDetail[];
13export type SimulationProgressDetail = {
20export type SimulationRunStatus = 'idle' | 'running' | 'completed' | 'failed';
22export type SimulationOutputChunkMetadata = {
29 sample_end_exclusive: number;
32export type SimulationOutputCwSegmentMetadata = {
37 sample_end_exclusive: number;
40export type SimulationOutputFileMetadata = {
42 receiver_name: string;
43 mode: 'pulsed' | 'cw';
45 total_samples: number;
47 sample_end_exclusive: number;
49 min_pulse_length_samples: number;
50 max_pulse_length_samples: number;
51 uniform_pulse_length: boolean;
52 chunks: SimulationOutputChunkMetadata[];
53 cw_segments: SimulationOutputCwSegmentMetadata[];
56export type SimulationOutputMetadata = {
57 schema_version: number;
58 simulation_name: string;
59 output_directory: string;
62 sampling_rate: number;
63 oversample_ratio: number;
64 files: SimulationOutputFileMetadata[];
67type SimulationProgressStore = {
68 isSimulating: boolean;
69 isGeneratingKml: boolean;
70 simulationProgress: Record<string, SimulationProgressState>;
71 simulationRunStatus: SimulationRunStatus;
72 simulationRunError: string | null;
73 simulationOutputMetadata: SimulationOutputMetadata | null;
75 setIsSimulating: (isSimulating: boolean) => void;
76 setIsGeneratingKml: (isGeneratingKml: boolean) => void;
77 startSimulationRun: () => void;
78 setSimulationProgressSnapshot: (
79 progress: Record<string, SimulationProgressState>
81 setSimulationOutputMetadata: (
82 metadata: SimulationOutputMetadata | null
84 completeSimulationRun: () => void;
85 failSimulationRun: (errorMessage: string) => void;
86 clearSimulationProgress: () => void;
89export const useSimulationProgressStore = create<SimulationProgressStore>()(
92 isGeneratingKml: false,
93 simulationProgress: {},
94 simulationRunStatus: 'idle',
95 simulationRunError: null,
96 simulationOutputMetadata: null,
98 setIsSimulating: (isSimulating) => set({ isSimulating }),
99 setIsGeneratingKml: (isGeneratingKml) => set({ isGeneratingKml }),
100 startSimulationRun: () =>
103 simulationProgress: {},
104 simulationRunStatus: 'running',
105 simulationRunError: null,
106 simulationOutputMetadata: null,
108 setSimulationProgressSnapshot: (progress) =>
109 set({ simulationProgress: progress }),
110 setSimulationOutputMetadata: (metadata) =>
111 set({ simulationOutputMetadata: metadata }),
112 completeSimulationRun: () =>
115 simulationRunStatus: 'completed',
116 simulationRunError: null,
118 failSimulationRun: (errorMessage) =>
121 simulationRunStatus: 'failed',
122 simulationRunError: errorMessage,
124 clearSimulationProgress: () =>
126 simulationProgress: {},
127 simulationRunStatus: 'idle',
128 simulationRunError: null,
129 simulationOutputMetadata: null,