/**
 * commerce-storefront blueprint · wiring seam for `@platform-modules/commerce-promotions`.
 */
import {
  applyPromo,
  getPromoByCode,
  pushSchema,
  recordRedemption,
  validatePromo,
  type PromotionsSchema,
} from '@platform-modules/commerce-promotions'
import type { Querier } from '@platform-modules/db'

export type PromotionsDb = Querier<PromotionsSchema>

export type StorefrontPromotions = {
  db: PromotionsDb
  applyPromo: typeof applyPromo
  getPromoByCode: typeof getPromoByCode
  validatePromo: typeof validatePromo
  recordRedemption: typeof recordRedemption
}

export async function createStorefrontPromotions(db: PromotionsDb): Promise<StorefrontPromotions> {
  await pushSchema(db)
  return {
    db,
    applyPromo,
    getPromoByCode: (q, code, vendorId) => getPromoByCode(q, code, vendorId),
    validatePromo,
    recordRedemption: (tx, promoId, userId) => recordRedemption(tx, promoId, userId),
  }
}
