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

import { useDebounce } from '@material-hu/hooks/useDebounce';

import { getCollaborators } from 'src/services/libraryService';
import { RequestError } from 'src/types/services';
import { Pagination } from 'src/utils/tableUtils';

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

const MIN_SEARCH_LENGTH = 1;

export type TSuccess = Awaited<ReturnType<typeof getCollaborators>>;
export type TError = RequestError;
export type TData = TSuccess['data'];

export const useGetCollaborators = (
  id: number,
  params: Pagination,
  options: UseQueryOptions<TSuccess, TError, TData> = {},
) => {
  const debouncedSearch = useDebounce(params.search || '');

  const debouncedParams = {
    ...params,
    search: debouncedSearch,
  };

  return useQuery<TSuccess, TError, TData>(
    librariesKeys.collaborators.paginated(id, debouncedParams),
    () => getCollaborators(id, debouncedParams),
    {
      ...options,
      enabled: Boolean(id && debouncedSearch.length > MIN_SEARCH_LENGTH),
      select: response => response.data,
    },
  );
};

export default useGetCollaborators;
