import { log_error, log_debug } from "../logger";

import { ANALYTICS_CORE_EVENTS } from "../events";

import { postAnalyticEvent } from "../manager";
import {
  replaceAnalyticsPropsNils,
  eventForEntry,
  eventForComponent,
  extensionsEvents,
} from "./helper";

declare type AnalyticsDefaultHelperProperties = {
  analyticsScreenData: AnalyticsScreenProperties;
  extraProps: any;
  component: ZappUIComponent;
  zappPipesData: ZappPipesData;
};

export const sendOnClickEvent = ({
  component,
  zappPipesData,
  extraProps,
  analyticsScreenData,
}: AnalyticsDefaultHelperProperties) => {
  const castedExtraProps: ExtraProps = extraProps;
  const componentData = component || extraProps.component;
  const data = zappPipesData || extraProps.zappPipesData;
  const eventName = ANALYTICS_CORE_EVENTS.TAP_CELL;

  if (!analyticsScreenData) {
    log_error(
      `sendOnClickEvent: no screen data available to send analytics event ${eventName}`
    );
  }

  const analyticsCustomProperties = extensionsEvents(
    castedExtraProps?.item?.extensions
  );

  const analyticsProps = {
    ...eventForEntry(castedExtraProps?.item, castedExtraProps?.index),
    ...eventForComponent(componentData, data?.data?.title, data),
    ...replaceAnalyticsPropsNils({
      ...analyticsScreenData,
    }),
  };

  if (analyticsCustomProperties) {
    analyticsProps.analyticsCustomProperties = analyticsCustomProperties;
  }

  log_debug(
    `sendOnClickEvent: send event: ${eventName}, screenName: ${analyticsScreenData.screen_name}`,
    {
      analyticsProps,
    }
  );

  postAnalyticEvent(eventName, analyticsProps);
};
