import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { request } from './client' import type { WorkTask } from '../types' export function useTasks(includeSubTasks = true) { return useQuery({ queryKey: ['tasks', { includeSubTasks }], queryFn: () => request({ url: '/tasks', params: { includeSubTasks } }), }) } export function useActiveTask() { return useQuery({ queryKey: ['tasks', 'active'], queryFn: () => request({ url: '/tasks/active' }), refetchInterval: 30_000, }) } export function useTask(id: number) { return useQuery({ queryKey: ['tasks', id], queryFn: () => request({ url: `/tasks/${id}` }), }) } function useInvalidateTasks() { const qc = useQueryClient() return () => { qc.invalidateQueries({ queryKey: ['tasks'] }) } } export function useCreateTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: (body: { title: string; description?: string; category?: string; parentTaskId?: number; estimatedMinutes?: number }) => request({ method: 'POST', url: '/tasks', data: body }), onSuccess: invalidate, }) } export function useUpdateTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: ({ id, ...body }: { id: number; title?: string; description?: string; category?: string; estimatedMinutes?: number }) => request({ method: 'PUT', url: `/tasks/${id}`, data: body }), onSuccess: invalidate, }) } export function useStartTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: (id: number) => request({ method: 'PUT', url: `/tasks/${id}/start` }), onSuccess: invalidate, }) } export function usePauseTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: ({ id, note }: { id: number; note?: string }) => request({ method: 'PUT', url: `/tasks/${id}/pause`, data: { note } }), onSuccess: invalidate, }) } export function useResumeTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: ({ id, note }: { id: number; note?: string }) => request({ method: 'PUT', url: `/tasks/${id}/resume`, data: { note } }), onSuccess: invalidate, }) } export function useCompleteTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: (id: number) => request({ method: 'PUT', url: `/tasks/${id}/complete` }), onSuccess: invalidate, }) } export function useAbandonTask() { const invalidate = useInvalidateTasks() return useMutation({ mutationFn: (id: number) => request({ method: 'DELETE', url: `/tasks/${id}` }), onSuccess: invalidate, }) }