import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import type { AdminUpdateSessionInput, CreateManualSessionInput, WorkSession, } from '@solelog/shared'; import { apiFetch } from '../lib/api'; // Active work sessions across all workers (admin cross-user view). // Polls every 5s so the Live view reflects who is working without a manual refresh. export function useActiveSessions() { return useQuery({ queryKey: ['admin', 'sessions', 'active'], queryFn: () => apiFetch('/api/admin/sessions/active'), refetchInterval: 5000, }); } // Every session (newest first) for the Sessies management screen. export function useAllSessions() { return useQuery({ queryKey: ['admin', 'sessions', 'all'], queryFn: () => apiFetch('/api/admin/sessions'), }); } // Roster for the create-form worker picker. export function useAdminUsers() { return useQuery({ queryKey: ['admin', 'users'], queryFn: () => apiFetch<{ id: string; name: string; email: string }[]>('/api/admin/users'), }); } export function useCreateManualSession() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (input: CreateManualSessionInput) => apiFetch('/api/admin/sessions', { method: 'POST', body: JSON.stringify(input), }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin', 'sessions'] }); }, }); } export function useUpdateSession() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, input }: { id: number; input: AdminUpdateSessionInput }) => apiFetch(`/api/admin/sessions/${id}`, { method: 'PUT', body: JSON.stringify(input), }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin', 'sessions'] }); }, }); } export function useAdminStopSession() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: number) => apiFetch(`/api/admin/sessions/${id}/stop`, { method: 'POST' }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin', 'sessions'] }); }, }); } export function useAdminDiscardSession() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: number) => apiFetch(`/api/admin/sessions/${id}/discard`, { method: 'POST' }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin', 'sessions'] }); }, }); }