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

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

import { updateEditors } from 'src/services/libraryService';
import { RequestError, RequestSuccess } from 'src/types/services';
import { useLokaliseTranslation } from 'src/utils/i18n';

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

export type TSuccess = RequestSuccess<typeof updateEditors>;
export type TError = RequestError;
export type TValues = {
  editors: { id: number }[];
};

export const useUpdateEditors = (id: number) => {
  const { t } = useLokaliseTranslation('general');
  const { enqueueSnackbar } = useHuSnackbar();
  const queryClient = useQueryClient();

  return useMutation<TSuccess, TError, TValues>(
    values => updateEditors(id, formatEditorsData(values.editors)),
    {
      onSuccess: () => {
        enqueueSnackbar({
          title: t('permissions.updated'),
          variant: 'success',
        });
        queryClient.invalidateQueries(librariesKeys.editors.byId(id));
      },
      onError: () => {
        enqueueSnackbar({ title: t('permissions.error'), variant: 'error' });
      },
    },
  );
};

export default useUpdateEditors;
