import {
  LegacyCancelCheckoutProperties,
  LegacyCheckoutProperties,
  LegacyCartProperties,
  LegacyDeliveryProperties,
  LegacyItemProperties,
} from "./legacyTypes";

import {
  checkoutPropertiesMapper,
  checkoutEventMapper,
  cartPropertiesMapper,
  deliveryPropertiesMapper,
  itemPropertiesMapper,
} from "./mappers";

import { DrugCatalog, ECommerceCatalogType, ECommerceTypes } from "./typings";
import { logIngestEvent } from "./logIngestEvent";
import { logCatalogEvent } from ".";

const logCancelCheckoutEvent = (
  properties: LegacyCancelCheckoutProperties,
  sendNow = false
) => {
  const newProperties = checkoutPropertiesMapper(properties);

  logIngestEvent(ECommerceTypes.CancelCheckout, newProperties, sendNow);
};

const logCheckoutEvent = async (
  properties: LegacyCheckoutProperties,
  userId = "",
  sendNow = false
): Promise<void> => {
  const newProperties = checkoutEventMapper(properties);
  logIngestEvent(ECommerceTypes.Checkout, newProperties, sendNow);
};

const logCartEvent = async (
  properties: LegacyCartProperties,
  sendNow = false
): Promise<void> => {
  const newProperties = cartPropertiesMapper(properties);
  logIngestEvent(ECommerceTypes.Cart, newProperties, sendNow);
};

const logDeliveryEvent = (
  properties: LegacyDeliveryProperties,
  userId = "",
  sendNow = false
): void => {
  const newProperties = deliveryPropertiesMapper(properties);
  logIngestEvent(ECommerceTypes.Delivery, newProperties, sendNow);
};

const logItemEvent = async (
  properties: LegacyItemProperties,
  productProperties?: DrugCatalog,
  sendNow = false
): Promise<void> => {
  const newProperties = itemPropertiesMapper(properties);
  logIngestEvent(ECommerceTypes.Item, newProperties, sendNow);

  logCatalogEvent(
    properties.item.id,
    ECommerceCatalogType.Drug,
    productProperties
  );
};

export {
  logCancelCheckoutEvent,
  logCheckoutEvent,
  logCartEvent,
  logDeliveryEvent,
  logItemEvent,
};
