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

export interface UseProductReviewsParams extends PaginatedDataHookOptionsBase {
  /**
   * The product ID to fetch reviews for.
   */
  id: string
}

interface UseProductReviewsReturns extends PaginatedDataHookReturnsBase {
  /**
   * The product reviews returned from the query.
   */
  reviews: ProductReview[] | null
}

export const useProductReviews = (
  params: UseProductReviewsParams
): UseProductReviewsReturns => {
  const {getProductReviews} = useShopActions()
  const {id, skip = false, ...restParams} = params

  const {data, ...rest} = useShopActionInfiniteQuery(
    ['productReviews', id, restParams],
    getProductReviews,
    {id, ...restParams},
    {skip}
  )

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