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

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

import { updateLibraryStatus } from 'src/services/libraryService';
import {
  KnowledgeLibraryArticle,
  LibraryNotificationType,
  LibraryStatus,
} from 'src/types/library';
import { RequestError, RequestSuccess } from 'src/types/services';
import { useLokaliseTranslation } from 'src/utils/i18n';

import { librariesKeys } from '../queries';

export type SuccessResponse = RequestSuccess<typeof updateLibraryStatus>;
export type ErrorResponse = RequestError;
export type Values = {
  state: LibraryStatus;
  notify: boolean;
  notificationType: LibraryNotificationType;
};

export const useUpdateLibraryStatus = (library: KnowledgeLibraryArticle) => {
  const { t } = useLokaliseTranslation('libraries');
  const { enqueueSnackbar } = useHuSnackbar();
  const queryClient = useQueryClient();

  return useMutation<SuccessResponse, ErrorResponse, Values>(
    ({ state, notify, notificationType }) =>
      updateLibraryStatus(library.id, state, notify, notificationType),
    {
      onSuccess: (_, { state }) => {
        queryClient.invalidateQueries(librariesKeys.library(library.id));
        enqueueSnackbar({
          title:
            state === LibraryStatus.ENABLED
              ? t('article.deactivate.success')
              : t('article.activate.success'),
          variant: 'success',
        });
      },
    },
  );
};

export default useUpdateLibraryStatus;
