import { useMutation, useQuery, useQueryClient } from '@tanstack/vue-query' import type { Ref } from 'vue' import { apiClient } from '@/lib/axios' import type { CreateEventPayload, EventType, UpdateEventPayload, } from '@/types/event' interface ApiResponse { success: boolean data: T message?: string } interface PaginatedResponse { data: T[] links: Record meta: { current_page: number per_page: number total: number last_page: number } } export function useEventList(orgId: Ref) { return useQuery({ queryKey: ['events', orgId], queryFn: async () => { const { data } = await apiClient.get>( `/organisations/${orgId.value}/events`, ) return data.data }, enabled: () => !!orgId.value, }) } export function useEventDetail(orgId: Ref, id: Ref) { return useQuery({ queryKey: ['events', orgId, id], queryFn: async () => { const { data } = await apiClient.get>( `/organisations/${orgId.value}/events/${id.value}`, ) return data.data }, enabled: () => !!orgId.value && !!id.value, }) } export function useCreateEvent(orgId: Ref) { const queryClient = useQueryClient() return useMutation({ mutationFn: async (payload: CreateEventPayload) => { const { data } = await apiClient.post>( `/organisations/${orgId.value}/events`, payload, ) return data.data }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['events', orgId.value] }) }, }) } export function useUpdateEvent(orgId: Ref, id: Ref) { const queryClient = useQueryClient() return useMutation({ mutationFn: async (payload: UpdateEventPayload) => { const { data } = await apiClient.put>( `/organisations/${orgId.value}/events/${id.value}`, payload, ) return data.data }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['events', orgId.value] }) queryClient.invalidateQueries({ queryKey: ['events', orgId.value, id.value] }) }, }) }