import type { CardsBlock } from "@/types";

export function mergeCardsBlocks(blocks: CardsBlock[]): CardsBlock | null {
  if (!blocks.length) return null;
  if (blocks.length === 1) return blocks[0];

  return blocks.reduce<CardsBlock>(
    (acc, block) => ({
      blockType: "cards",
      titleBlock: acc.titleBlock.heading ? acc.titleBlock : block.titleBlock,
      inclusionsTitle: acc.inclusionsTitle.heading
        ? acc.inclusionsTitle
        : block.inclusionsTitle,
      expectTitle: acc.expectTitle.heading
        ? acc.expectTitle
        : block.expectTitle,
      packages: [...acc.packages, ...block.packages],
      inclusions: [...acc.inclusions, ...block.inclusions],
      expectItems: [...acc.expectItems, ...block.expectItems],
      cta: acc.cta ?? block.cta ?? null,
    }),
    {
      blockType: "cards",
      titleBlock: { icon: null, heading: "", subText: "" },
      inclusionsTitle: { icon: null, heading: "" },
      expectTitle: { icon: null, heading: "" },
      packages: [],
      inclusions: [],
      expectItems: [],
      cta: null,
    },
  );
}
