/* eslint-disable @typescript-eslint/no-explicit-any */ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { toast } from 'sonner' import { devicesService } from '../services/devices-service' import { DevicePortsUpdateRequest } from '../types/device' export const useDevices = ({ type = 'all', }: { type?: 'otb' | 'closure' | 'odp' | 'all' } = {}) => { return useQuery({ queryKey: ['devices'], queryFn: devicesService.getDevices, select: (data) => { if (type === 'otb') { return data.data.filter(d => d.device_type.toLowerCase() === 'otb') || [] } if (type === 'closure') { return data.data.filter(d => d.device_type.toLowerCase() === 'closure') || [] } if (type === 'odp') { return data.data.filter(d => d.device_type.toLowerCase() === 'odp') || [] } return data.data || [] }, }) } export const useDevice = (id: string) => { return useQuery({ queryKey: ['device', id], queryFn: () => devicesService.getDevice(id), select: (data) => data.data, enabled: !!id, }) } export const useDeviceWithPorts = (id: string) => { return useQuery({ queryKey: ['device-with-ports', id], queryFn: () => devicesService.getDeviceWithPorts(id), select: (data) => data.data, enabled: !!id, }) } export const useCreateDevice = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: (data: FormData) => devicesService.createDevice(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['devices'] }) toast.success('Device created successfully') }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to create device') }, }) } export const useUpdateDevice = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: ({ id, formData }: { id: string; formData: FormData }) => devicesService.updateDevice(id, formData), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['devices'] }) toast.success('Device updated successfully') }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to update device') }, }) } export const useDeleteDeviceImage = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: ({ deviceId, imageName }: { deviceId: string; imageName: string }) => devicesService.deleteDeviceImage(deviceId, imageName), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: ['devices'] }) queryClient.invalidateQueries({ queryKey: ['device', variables.deviceId] }) queryClient.invalidateQueries({ queryKey: ['device-with-ports', variables.deviceId] }) toast.success('Image deleted successfully') }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to delete image') }, }) } // Updated hook to use the new assign-customer endpoint export const useAssignCustomersToPorts = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: (data: DevicePortsUpdateRequest) => devicesService.assignCustomersToPorts(data), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: ['devices'] }) queryClient.invalidateQueries({ queryKey: ['device-with-ports', variables.device_id] }) toast.success('Customer assignments updated successfully') }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to update customer assignments') }, }) } // Keep the old hook name for backward compatibility export const useUpdateDevicePorts = useAssignCustomersToPorts export const useDeleteDevice = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: (id: string) => devicesService.deleteDevice(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['devices'] }) toast.success('Device deleted successfully') }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to delete device') }, }) } export const useBulkDeleteDevices = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: (ids: string[]) => devicesService.bulkDeleteDevices(ids), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['devices'] }) toast.success('Devices deleted successfully') }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to delete devices') }, }) } export const useBulkCreateDevices = () => { const queryClient = useQueryClient() return useMutation({ mutationFn: (devices: any[]) => devicesService.bulkCreateDevices(devices), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ['devices'] }) const successCount = data.data?.success_count || 0 const failureCount = data.data?.failure_count || 0 if (failureCount > 0) { toast.warning(`${successCount} devices created successfully, ${failureCount} failed`) } else { toast.success(`${successCount} devices created successfully`) } }, onError: (error: any) => { toast.error(error.response?.data?.status?.description || 'Failed to create devices') }, }) }