import { useQuery, UseQueryOptions } from 'react-query';

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

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

const select = (response: TSuccess, t: TCustomFunction) => {
  const breadcrumbs = getBreadcrumbItems(response.data);
  return [...breadcrumbs, { title: t('report.title'), id: null }];
};

export type TSuccess = Awaited<ReturnType<typeof getLibraryTree>>;
export type TError = RequestError;
export type TData = ReturnType<typeof select>;

export const useGetLibraryTree = (
  libraryId: number,
  options: UseQueryOptions<TSuccess, TError, TData> = {},
) => {
  const { t } = useLokaliseTranslation('general');

  return useQuery<TSuccess, TError, TData>(
    librariesKeys.libraryTree(libraryId),
    () => getLibraryTree(libraryId),
    {
      ...options,
      enabled: !!libraryId,
      select: response => select(response, t),
    },
  );
};

export default useGetLibraryTree;
