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

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

import { updateLibraryCover } from 'src/services/libraryService';
import { KnowledgeLibraryArticle } from 'src/types/library';
import { RequestError, RequestSuccess } from 'src/types/services';
import { getSignedUploadUrl } from 'src/utils/filesUtils';
import { useLokaliseTranslation } from 'src/utils/i18n';
import { logEvent, LogEvents } from 'src/utils/logging';

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

export type SuccessResponse = RequestSuccess<typeof updateLibraryCover>;
export type ErrorResponse = RequestError;
export type Values = {
  file: File;
};

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

  return useMutation<SuccessResponse, ErrorResponse, Values>(
    async ({ file }) => {
      const url = (await getSignedUploadUrl({ file })) || '';
      return updateLibraryCover(library.id, url);
    },
    {
      onSuccess: () => {
        logEvent(LogEvents.WIDGET_LIBRARY_UPDATE, {
          widgetId: library.id,
          parentId: library.parentId,
          name: library.title,
        });

        enqueueSnackbar({
          title: t('cover_picture.upload.success'),
          variant: 'success',
        });
        queryClient.invalidateQueries(librariesKeys.library(library.id));
      },
    },
  );
};

export default useUpdateCoverPicture;
