import {
  MetricsResponse,
  MetricEventTypes,
  Metrics,
  DateStatsResponse,
  SegmentedStatsResponse,
} from 'src/types/library';

export const formatMetrics = (metrics: MetricsResponse) => {
  if (!metrics || metrics.length === 0) return null;

  const formattedMetrics: Metrics = {
    totalViews: null,
    uniqueViews: null,
    totalAttachmentDownloads: null,
  };

  metrics.forEach(metric => {
    if (metric.eventType === MetricEventTypes.LIBRARY_VIEW) {
      formattedMetrics.totalViews = metric.totals;
      formattedMetrics.uniqueViews = metric.uniques;
    }

    if (metric.eventType === MetricEventTypes.ATTACHMENT_DOWNLOAD) {
      formattedMetrics.totalAttachmentDownloads = metric.totals;
    }
  });

  return formattedMetrics;
};

export const formatDateStats = (dateStats: DateStatsResponse) => {
  if (!dateStats || dateStats.length === 0) return null;

  const isEmpty = dateStats.every(stat => stat.uniques === 0);

  if (isEmpty) return null;

  return dateStats.map(stat => ({
    date: stat.eventDate,
    value: stat.uniques,
  }));
};

export const isSegmentedStatsEmpty = (
  segmentedStats: SegmentedStatsResponse,
) => {
  if (!segmentedStats) return true;

  return (
    segmentedStats.count === 0 ||
    (segmentedStats.items?.length === segmentedStats.count &&
      segmentedStats.items?.every(
        stat => stat.uniques === 0 && stat.totals === 0,
      ))
  );
};
