import { useMutation, useQueryClient } from 'react-query';

import useHuSnackbar from '@material-hu/components/design-system/Snackbar';

import { useLokaliseTranslation } from 'src/utils/i18n';

import { knowledgeBaseKeys } from '../queries';
import {
  deleteKnowledgeBaseFile,
  deleteKnowledgeBaseFiles,
  deleteKnowledgeBaseFolder,
} from '../services';

export const useDeleteKnowledgeBaseItems = () => {
  const { t } = useLokaliseTranslation('agents');
  const { enqueueSnackbar } = useHuSnackbar();
  const queryClient = useQueryClient();

  const invalidateKnowledgeBaseList = () => {
    // Bulk deletes are processed asynchronously by the backend — a short
    // delay prevents refetching before all items have been removed.
    setTimeout(() => {
      queryClient.invalidateQueries(knowledgeBaseKeys.list());
    }, 1000);
  };

  const deleteFile = useMutation({
    mutationFn: (filename: string) => deleteKnowledgeBaseFile(filename),
    onSuccess: () => {
      enqueueSnackbar({
        title: t('knowledge_base.delete_file_dialog.success'),
        variant: 'success',
      });

      invalidateKnowledgeBaseList();
    },
    onError: () => {
      enqueueSnackbar({
        title: t('knowledge_base.delete_file_dialog.error'),
        variant: 'error',
      });
    },
  });

  const deleteFiles = useMutation({
    mutationFn: (filenames: string[]) => deleteKnowledgeBaseFiles(filenames),
    onSuccess: () => {
      enqueueSnackbar({
        title: t('knowledge_base.bulk_actions.delete_success'),
        variant: 'success',
      });

      invalidateKnowledgeBaseList();
    },
    onError: () => {
      enqueueSnackbar({
        title: t('knowledge_base.bulk_actions.delete_error'),
        variant: 'error',
      });
    },
  });

  const deleteFolder = useMutation({
    mutationFn: (path: string) => deleteKnowledgeBaseFolder(path),
    onSuccess: (_, path: string) => {
      enqueueSnackbar({
        title: t('knowledge_base.delete_folder_dialog.success', {
          name: path.split('/').filter(Boolean).at(-1),
        }),
        variant: 'success',
      });

      invalidateKnowledgeBaseList();
    },
    onError: () => {
      enqueueSnackbar({
        title: t('knowledge_base.delete_folder_dialog.error'),
        variant: 'error',
      });
    },
  });

  return { deleteFile, deleteFiles, deleteFolder };
};
