import { useMutation, useQuery, useQueryClient } from '@tanstack/vue-query' import type { Ref } from 'vue' import { apiClient } from '@/lib/axios' import type { CreateTimeSlotPayload, TimeSlot, UpdateTimeSlotPayload } from '@/types/timeSlot' interface ApiResponse { success: boolean data: T message?: string } interface PaginatedResponse { data: T[] } export function useTimeSlotList(orgId: Ref, eventId: Ref, options?: { includeParent?: Ref; includeChildren?: Ref }) { const includeParent = options?.includeParent const includeChildren = options?.includeChildren return useQuery({ queryKey: ['time-slots', eventId, includeParent, includeChildren], queryFn: async () => { const params: Record = {} if (includeParent?.value) params.include_parent = 'true' if (includeChildren?.value) params.include_children = 'true' const { data } = await apiClient.get>( `/organisations/${orgId.value}/events/${eventId.value}/time-slots`, { params }, ) return data.data }, enabled: () => !!orgId.value && !!eventId.value, }) } export function useCreateTimeSlot(orgId: Ref, eventId: Ref) { const queryClient = useQueryClient() return useMutation({ mutationFn: async (payload: CreateTimeSlotPayload) => { const { data } = await apiClient.post>( `/organisations/${orgId.value}/events/${eventId.value}/time-slots`, payload, ) return data.data }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['time-slots', eventId.value] }) }, }) } export function useUpdateTimeSlot(orgId: Ref, eventId: Ref) { const queryClient = useQueryClient() return useMutation({ mutationFn: async ({ id, ...payload }: UpdateTimeSlotPayload & { id: string }) => { const { data } = await apiClient.put>( `/organisations/${orgId.value}/events/${eventId.value}/time-slots/${id}`, payload, ) return data.data }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['time-slots', eventId.value] }) }, }) } export function useDeleteTimeSlot(orgId: Ref, eventId: Ref) { const queryClient = useQueryClient() return useMutation({ mutationFn: async (id: string) => { await apiClient.delete(`/organisations/${orgId.value}/events/${eventId.value}/time-slots/${id}`) }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['time-slots', eventId.value] }) }, }) }