/**
 * commerce-storefront blueprint · wiring seam for `@platform-modules/commerce-reviews`.
 */
import {
  getRatingAggregate,
  listReviews,
  moderateReview,
  pushReviewsSchema,
  submitReview,
  type ReviewsSchema,
} from '@platform-modules/commerce-reviews'
import type { ListReviewsOptions } from '@platform-modules/commerce-reviews'
import type { Querier } from '@platform-modules/db'

export type ReviewsDb = Querier<ReviewsSchema>

export type StorefrontReviews = {
  db: ReviewsDb
  listReviews: (q: ReviewsDb, productId: string, opts: ListReviewsOptions) => ReturnType<typeof listReviews>
  submitReview: typeof submitReview
  getRatingAggregate: typeof getRatingAggregate
  moderateReview: typeof moderateReview
}

export async function createStorefrontReviews(db: ReviewsDb): Promise<StorefrontReviews> {
  await pushReviewsSchema(db)
  return {
    db,
    listReviews: (q, productId, opts) => listReviews(q, productId, opts),
    submitReview: (q, input, opts) => submitReview(q, input, opts),
    getRatingAggregate: (q, productId) => getRatingAggregate(q, productId),
    moderateReview: (q, reviewId, status) => moderateReview(q, reviewId, status),
  }
}
