import DeferredRunner from "../deferredRunner"

let deferredRunner: DeferredRunner
const moduleName = 'ECommerce'

const wrappedMethodNames = [
    'updateDrugCatalog',
    'updateGroceryCatalog',
    'updateFacilityCatalog',
    'updateBloodCatalog',
    'updateOxygenCatalog',
    'updateMedicalEquipmentCatalog',
    'logItemReportEvent',
    'logItemRequestEvent',
    'logItemVerificationEvent',
    'logCheckoutEvent',
    'logCartEvent',
    'logDeliveryEvent',
    'logItemEvent',
    'logScheduleDeliveryEvent',
    'startTrackingImpressions',
    'stopTrackingImpressions',
    'restartTrackingImpressions'
]

// expose each method as a wrapper that just calls the deferredRunner
const wrappedMethods = wrappedMethodNames.reduce(
    (obj, current) => {
        obj[current] = (...args) => deferredRunner.execute(moduleName, current, args)
        return obj
    },
    {})

const init = (injectedDeferredRunner) => {
    deferredRunner = injectedDeferredRunner
}

export default {
    init,
    ...wrappedMethods
}
