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

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

import { duplicateLibrary } from 'src/services/libraryService';
import {
  KnowledgeLibraryArticle,
  DuplicateLibraryValues,
} 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 { librariesKeys } from '../queries';
import { librariesRoutes } from '../routes';

export type SuccessResponse = RequestSuccess<typeof duplicateLibrary>;
export type ErrorResponse = RequestError;
export type Values = DuplicateLibraryValues;

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

  return useMutation<SuccessResponse, ErrorResponse, Values>(
    librariesKeys.duplicate(library.id),
    ({ title, parentId }) =>
      duplicateLibrary(library.id, { title }, { parentId }),
    {
      onSuccess: response => {
        logEvent(LogEvents.WIDGET_LIBRARY_DUPLICATE, {
          originalId: library.id,
          widgetId: response.data.id,
          parentId: response.data.parentId,
          name: response.data.title,
        });

        enqueueSnackbar({
          title: t('article.duplicate.success'),
          variant: 'success',
        });
        navigate(librariesRoutes.library(response.data.id));
      },
    },
  );
};

export default useDuplicateLibrary;
