import type { PageSection } from "@/admin/types";
import {
  HOW_CONNECTS_HEADING_TEMPLATE,
  HOW_CONNECTS_LEGACY_HEADING,
  buildContentPlaceholderVars,
  interpolateContentPlaceholders,
  mergeBlockPlaceholderVars,
  CONTENT_PLACEHOLDER_FALLBACKS,
} from "@/lib/contentPlaceholders";

export {
  HOW_CONNECTS_HEADING_TEMPLATE,
  HOW_CONNECTS_LEGACY_HEADING,
};

export const HOW_CONNECTS_FALLBACK_SUBJECT = CONTENT_PLACEHOLDER_FALLBACKS.subject ?? "This Subject";

type ContentLike = Record<string, unknown> | undefined;

function str(value: unknown): string {
  return typeof value === "string" ? value : "";
}

/** @deprecated Use buildContentPlaceholderVars from contentPlaceholders */
export function findCourseNameFromSections(sections: PageSection[]): string {
  return buildContentPlaceholderVars(sections).course_name ?? "";
}

export function resolveHowConnectsSubject(content: ContentLike, pageCourseName = ""): string {
  const vars = mergeBlockPlaceholderVars(
    { subject: pageCourseName, course_name: pageCourseName, course: pageCourseName },
    (content ?? {}) as Record<string, unknown>
  );
  return vars.subject?.trim() || HOW_CONNECTS_FALLBACK_SUBJECT;
}

export function applyHowConnectsSubjectTemplate(template: string, subject: string): string {
  return interpolateContentPlaceholders(template, { subject });
}

export function resolveHowConnectsHeading(content: ContentLike, pageCourseName = ""): string {
  const vars = mergeBlockPlaceholderVars(
    { subject: pageCourseName, course_name: pageCourseName, course: pageCourseName },
    (content ?? {}) as Record<string, unknown>
  );
  const rawHeading = str(content?.heading).trim();

  if (rawHeading.includes("{subject}")) {
    return interpolateContentPlaceholders(rawHeading, vars);
  }

  if (!rawHeading || rawHeading === HOW_CONNECTS_LEGACY_HEADING) {
    return interpolateContentPlaceholders(HOW_CONNECTS_HEADING_TEMPLATE, vars);
  }

  return interpolateContentPlaceholders(rawHeading, vars);
}

/** @deprecated Use resolveBlockContentForRender from contentPlaceholders */
export function enrichHowConnectsContent(
  content: Record<string, unknown>,
  pageCourseName: string
): Record<string, unknown> {
  if (str(content.subject).trim()) return content;
  const courseName = pageCourseName.trim();
  if (!courseName) return content;
  return { ...content, subject: courseName };
}
