import type { BulkLeadUploadResultData, LeadImportAggregateResult } from "@/types/lead";
import type { BulkUploadApiResponse } from "@/redux/api/leadApi";

/** Normalize RTK unwrap result from POST /lead/bulkUpload. */
export function extractBulkUploadData(
  res: BulkUploadApiResponse | unknown,
): BulkLeadUploadResultData {
  if (!res || typeof res !== "object") {
    return { created: 0, skipped: 0, totalRequested: 0, errors: [] };
  }
  const envelope = res as BulkUploadApiResponse;
  const d = envelope.data;
  if (
    d &&
    typeof d.created === "number" &&
    typeof d.skipped === "number" &&
    Array.isArray(d.errors)
  ) {
    return {
      created: d.created,
      skipped: d.skipped,
      totalRequested:
        typeof d.totalRequested === "number" ? d.totalRequested : d.created + d.skipped,
      errors: d.errors,
    };
  }
  return { created: 0, skipped: 0, totalRequested: 0, errors: [] };
}

/** Merge multiple batch results into one summary for the UI. */
export function aggregateBulkUploadResults(
  batchResults: BulkLeadUploadResultData[],
): LeadImportAggregateResult {
  let totalCreated = 0;
  let totalRequested = 0;
  const allErrors: string[] = [];

  for (const b of batchResults) {
    totalCreated += b.created;
    totalRequested +=
      typeof b.totalRequested === "number"
        ? b.totalRequested
        : b.created + b.skipped;
    allErrors.push(...(b.errors || []));
  }

  const totalSkipped = totalRequested - totalCreated;

  return {
    totalCreated,
    totalSkipped,
    totalRequested,
    allErrors,
  };
}
