import { create } from "zustand"; import type { AnnotationTool } from "@/types"; interface ReviewPlayerStore { // Playback isPlaying: boolean; currentFrame: number; currentTime: number; duration: number; playbackRate: number; volume: number; isMuted: boolean; isFullscreen: boolean; // Annotation isAnnotating: boolean; selectedTool: AnnotationTool; selectedColor: string; strokeWidth: number; showAnnotations: boolean; // Config (set from version data) fps: number; totalFrames: number; // Actions setPlaying: (playing: boolean) => void; setCurrentFrame: (frame: number) => void; setCurrentTime: (time: number) => void; setDuration: (duration: number) => void; setPlaybackRate: (rate: number) => void; setVolume: (volume: number) => void; setMuted: (muted: boolean) => void; setFullscreen: (fullscreen: boolean) => void; setAnnotating: (annotating: boolean) => void; setSelectedTool: (tool: AnnotationTool) => void; setSelectedColor: (color: string) => void; setStrokeWidth: (width: number) => void; setShowAnnotations: (show: boolean) => void; setFps: (fps: number) => void; setTotalFrames: (frames: number) => void; reset: () => void; } const initialState = { isPlaying: false, currentFrame: 0, currentTime: 0, duration: 0, playbackRate: 1, volume: 1, isMuted: false, isFullscreen: false, isAnnotating: false, selectedTool: "freehand" as AnnotationTool, selectedColor: "#ef4444", strokeWidth: 2, showAnnotations: true, fps: 24, totalFrames: 0, }; export const useReviewStore = create((set) => ({ ...initialState, setPlaying: (isPlaying) => set({ isPlaying }), setCurrentFrame: (currentFrame) => set({ currentFrame }), setCurrentTime: (currentTime) => set({ currentTime }), setDuration: (duration) => set({ duration }), setPlaybackRate: (playbackRate) => set({ playbackRate }), setVolume: (volume) => set({ volume }), setMuted: (isMuted) => set({ isMuted }), setFullscreen: (isFullscreen) => set({ isFullscreen }), setAnnotating: (isAnnotating) => set({ isAnnotating }), setSelectedTool: (selectedTool) => set({ selectedTool }), setSelectedColor: (selectedColor) => set({ selectedColor }), setStrokeWidth: (strokeWidth) => set({ strokeWidth }), setShowAnnotations: (showAnnotations) => set({ showAnnotations }), setFps: (fps) => set({ fps }), setTotalFrames: (totalFrames) => set({ totalFrames }), reset: () => set(initialState), }));