import { useMutation } from 'react-query';
import { useNavigate } from 'react-router-dom';

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

import useGeneralError from 'src/hooks/useGeneralError';
import { deleteLibrary } from 'src/services/libraryService';
import { KnowledgeLibraryArticle, LibraryErrors } from 'src/types/library';
import { RequestSuccess, RequestError } from 'src/types/services';
import { useLokaliseTranslation } from 'src/utils/i18n';
import { logEvent, LogEvents } from 'src/utils/logging';

import { librariesRoutes } from '../routes';

export type SuccessResponse = RequestSuccess<typeof deleteLibrary>;
export type ErrorResponse = RequestError;
export type Values = {};

export const useDeleteLibrary = (library: KnowledgeLibraryArticle) => {
  const { t } = useLokaliseTranslation('libraries');
  const navigate = useNavigate();
  const { enqueueSnackbar } = useHuSnackbar();
  const showGeneralError = useGeneralError();

  return useMutation<SuccessResponse, ErrorResponse, Values>(
    () => deleteLibrary(library.id),
    {
      onSuccess: () => {
        enqueueSnackbar({
          title: t('library.delete.success'),
          variant: 'success',
        });

        logEvent(LogEvents.WIDGET_LIBRARY_DELETE, {
          widgetId: library.id,
          parentId: library.parentId,
          name: library.title,
        });

        library.parentId
          ? navigate(librariesRoutes.library(library.parentId))
          : navigate(librariesRoutes.base());
      },
      onError: err => {
        if (err.response?.data?.code === LibraryErrors.DELETE_WITH_CHILDREN) {
          enqueueSnackbar({
            title: t('library.delete.error.children'),
            variant: 'error',
          });
        } else {
          showGeneralError(err);
        }
      },
    },
  );
};

export default useDeleteLibrary;
