import {useShopActionInfiniteQuery} from '../../internal/reactQuery'
import {useShopActions} from '../../internal/useShopActions'
import {
  PaginatedDataHookOptionsBase,
  PaginatedDataHookReturnsBase,
  ProductList,
} from '../../types'

interface UseProductListsParams extends PaginatedDataHookOptionsBase {
  /**
   * The number of products to fetch per product list.
   */
  itemsFirst?: number
}

interface UseProductListsResult extends PaginatedDataHookReturnsBase {
  productLists: ProductList[] | null
}

export const useProductLists = (
  params?: UseProductListsParams
): UseProductListsResult => {
  const {getProductLists} = useShopActions()
  const {skip, ...shopActionParams} = params ?? {}

  const {data, ...rest} = useShopActionInfiniteQuery(
    ['productLists', shopActionParams],
    getProductLists,
    shopActionParams,
    {skip}
  )

  return {
    ...rest,
    productLists: data,
  }
}
