import DeferredRunner from "../deferredRunner";

let deferredRunner: DeferredRunner;
const moduleName = "ECommerce";

const wrappedMethodNames = [
  "logCatalogEvent",
  "logIngestEvent",
  "startTrackingImpressions",
  "stopTrackingImpressions",
  "restartTrackingImpressions",
  "logCancelCheckoutEvent",
  "logCheckoutEvent",
  "logCartEvent",
  "logDeliveryEvent",
  "logItemEvent",
];

// 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,
};
