const DataLoader = require('dataloader')

const loyalty = require('../../../loyalty')
const { getSlimCustomerByIdBatch } = require('../../../customers')

const customerLoader = new DataLoader(
  ids => {
    return getSlimCustomerByIdBatch(ids)
  },
  { cache: false },
)

const resolvers = {
  IndividualDiscount: {
    customer: parent => customerLoader.load(parent.customerId),
  },
  Query: {
    promoCodes: () => loyalty.getAvailablePromoCodes(),
    individualDiscounts: () => loyalty.getAvailableIndividualDiscounts(),
  },
  Mutation: {
    createPromoCode: (...[, { code, discount }]) =>
      loyalty.createPromoCode(code, discount),
    deletePromoCode: (...[, { codeId }]) => loyalty.deletePromoCode(codeId),
    createIndividualDiscount: (...[, { customerId, discount }]) =>
      loyalty.createIndividualDiscount(customerId, discount),
    deleteIndividualDiscount: (...[, { discountId }]) =>
      loyalty.deleteIndividualDiscount(discountId),
  },
}

module.exports = resolvers
