import axios from '@/network/axios';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { toast } from 'sonner';

export type BulkUploadError = {
  row_number: number;
  reason: string;
};

export type BulkUploadResult = {
  imported: number;
  skipped: number;
  errors: BulkUploadError[];
};

const adminBulkUploadPhones = async (file: File): Promise<BulkUploadResult> => {
  const formData = new FormData();
  formData.append('file', file);

  // Content-Type (multipart boundary) is set automatically by axios/FormData.
  const response = await axios.post('/influencer-number/bulkExcel/admin', formData);

  const data = response.data?.data ?? {};
  return {
    imported: data.imported ?? 0,
    skipped: data.skipped ?? 0,
    errors: data.errors ?? [],
  };
};

const useAdminBulkUploadPhones = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: (file: File) => adminBulkUploadPhones(file),
    onSuccess: (result) => {
      toast.success(
        `Uploaded successfully: ${result.imported} imported, ${result.skipped} skipped`,
      );
      queryClient.invalidateQueries({ queryKey: ['influencer-numbers'] });
    },
    onError: () => {
      toast.error('Failed to upload phone sheet');
    },
  });
};

export default useAdminBulkUploadPhones;
