import { create } from 'zustand'; export interface FinDesign { profile: string; aspectRatio: number; sweepAngle: number; thickness: number; span: number; quantity: number; } export interface ResistanceData { waveResistance: number; viscousResistance: number; finPenalty: number; totalResistance: number; froudeNumber: number; reynoldsNumber: string; } interface SimState { waveAmplitude: number; // 0 – 8 m temperature: number; // 0 – 40 °C waveExpansion: number; // 0.1 – 4.0 (spatial frequency multiplier) finScale: number; // 0.5 – 2.0 finDesign: FinDesign | null; resistance: ResistanceData | null; designNote: string; aiSource: 'huggingface' | 'algorithmic' | 'idle'; isLoadingAI: boolean; fluidField: number[] | null; // Setters setWaveAmplitude: (v: number) => void; setTemperature: (v: number) => void; setWaveExpansion: (v: number) => void; setFinScale: (v: number) => void; setAIResult: (r: { suggestedFinScale: number; finDesign: FinDesign; resistance: ResistanceData; designNote: string; source: string; }) => void; setLoadingAI: (v: boolean) => void; setFluidField: (f: number[]) => void; } export const useStore = create((set) => ({ waveAmplitude: 1.5, temperature: 20, waveExpansion: 1.0, finScale: 1.0, finDesign: null, resistance: null, designNote: 'Esperando cálculo IA…', aiSource: 'idle', isLoadingAI: false, fluidField: null, setWaveAmplitude: (v) => set({ waveAmplitude: v }), setTemperature: (v) => set({ temperature: v }), setWaveExpansion: (v) => set({ waveExpansion: v }), setFinScale: (v) => set({ finScale: v }), setAIResult: (r) => set({ finScale: r.suggestedFinScale, finDesign: r.finDesign, resistance: r.resistance, designNote: r.designNote, aiSource: r.source === 'huggingface' ? 'huggingface' : 'algorithmic', }), setLoadingAI: (v) => set({ isLoadingAI: v }), setFluidField: (f) => set({ fluidField: f }), }));