import { invoke } from '@tauri-apps/api/core'; import { create } from 'zustand'; export type TimerPhase = 'work' | 'short_break' | 'long_break'; export interface TimerTickPayload { phase: TimerPhase; remaining_secs: number; total_secs: number; session_count: number; current_task_id: string | null; } export interface TimerStatus { phase: TimerPhase; remaining_secs: number; total_secs: number; running: boolean; session_count: number; current_task_id: string | null; } interface TimerState { phase: TimerPhase; remainingSecs: number; totalSecs: number; running: boolean; sessionCount: number; currentTaskId: string | null; syncFromBackend: () => Promise; setTimerTick: (payload: TimerTickPayload) => void; setRunning: (running: boolean) => void; setCurrentTaskId: (currentTaskId: string | null) => void; } export const useTimerStore = create((set) => ({ phase: 'work', remainingSecs: 25 * 60, totalSecs: 25 * 60, running: false, sessionCount: 0, currentTaskId: null, syncFromBackend: async () => { const status = await invoke('get_timer_status'); set({ phase: status.phase, remainingSecs: status.remaining_secs, totalSecs: status.total_secs, running: status.running, sessionCount: status.session_count, currentTaskId: status.current_task_id, }); }, setTimerTick: (payload) => set({ phase: payload.phase, remainingSecs: payload.remaining_secs, totalSecs: payload.total_secs, sessionCount: payload.session_count, currentTaskId: payload.current_task_id, }), setRunning: (running) => set({ running }), setCurrentTaskId: (currentTaskId) => set({ currentTaskId }), }));