import { normalizeParentCourseOverviewContent } from "@/components/page-blocks/parent-course-overview/parseContent";
import { normalizeHeroContent } from "@/components/page-blocks/hero/normalizeContent";
import { normalizeGradeHeroContent } from "@/components/page-blocks/GradeHeroBlock";
import { normalizeApiQueryFilters } from "@/lib/apiQueryFilters";
import { normalizeOptionalObjectArrays } from "@/lib/contentFormUtils";

function newSectionId(index: number): string {
  return `pco-${Date.now()}-${index}-${Math.random().toString(36).slice(2, 9)}`;
}

/**
 * Deep-clone block content for paste/duplicate.
 * Parent course overview: normalize schema + fresh section ids per instance.
 */
export function cloneBlockContent(
  content: Record<string, unknown> | null | undefined,
  componentSlug: string
): Record<string, unknown> {
  const cloned = JSON.parse(JSON.stringify(content ?? {})) as Record<string, unknown>;

  if (componentSlug === "hero") {
    return normalizeOptionalObjectArrays(normalizeHeroContent(cloned) as Record<string, unknown>);
  }

  if (componentSlug === "grade-hero" || componentSlug === "design-to-impact-hero") {
    return normalizeOptionalObjectArrays(normalizeGradeHeroContent(cloned) as Record<string, unknown>);
  }

  if (componentSlug === "grade-family-guides-api") {
    cloned.filters = normalizeApiQueryFilters(cloned.filters);
    return normalizeOptionalObjectArrays(cloned);
  }

  if (componentSlug !== "parent-course-overview") {
    return normalizeOptionalObjectArrays(cloned);
  }

  const normalized = normalizeParentCourseOverviewContent(cloned);
  const sections = (normalized.sections ?? []).map((section, index) => ({
    ...section,
    id: newSectionId(index),
  }));

  return normalizeOptionalObjectArrays({
    ...normalized,
    sections,
  } as Record<string, unknown>);
}
