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

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

import { createLibrary } from 'src/services/libraryService';
import { LibraryValues } 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 { formatLibrary } from '../utils';

export type TSuccess = RequestSuccess<typeof createLibrary>;
export type TError = RequestError;
export type TValues = LibraryValues;

export const useCreateLibrary = (
  options?: UseMutationOptions<TSuccess, TError, TValues>,
) => {
  const { t } = useLokaliseTranslation('libraries');
  const { enqueueSnackbar } = useHuSnackbar();
  const queryClient = useQueryClient();

  return useMutation<TSuccess, TError, TValues>(
    values => createLibrary(formatLibrary(values)),
    {
      ...options,
      onSuccess: (response, values, context) => {
        options?.onSuccess?.(response, values, context);

        logEvent(LogEvents.WIDGET_LIBRARY_CREATE, {
          widgetId: response.data.id,
          parentId: response.data.parentId,
          name: response.data.title,
        });

        enqueueSnackbar({
          title: t('article.save.success'),
          variant: 'success',
        });
        queryClient.invalidateQueries(librariesKeys.all());
      },
    },
  );
};

export default useCreateLibrary;
