// FAQPage schema.org reconstruit depuis les blocks `faq` des sections WP.
// Avant la bascule vers les vues originales, c'est le block faq du
// BlockRenderer (src/components/blocks/Faq.tsx) qui émettait ce JSON-LD quand
// l'option `json_ld` était activée. Les vues originales n'émettent pas de
// JSON-LD : les routes l'émettent donc elles-mêmes via ce helper (même règle
// `jsonLd !== false`, mêmes réponses en texte brut), à l'image de ce que fait
// app/toitures/[slug]/page.tsx avec les FAQ mappées.

import { arr } from "./mappers";
import type { FaqBlock, WpSection } from "./types";

const stripHtml = (html: string) =>
  html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();

const isFaqBlock = (section: WpSection): section is FaqBlock =>
  typeof section.__typename === "string" &&
  section.__typename.endsWith("FaqLayout");

/**
 * FAQPage JSON-LD agrégé (toutes les questions des blocks `faq` dont
 * `json_ld` n'est pas désactivé), ou null si aucune question.
 */
export function faqPageJsonLd(
  sections: WpSection[] | null | undefined
): Record<string, unknown> | null {
  const questions = (sections ?? [])
    .filter(isFaqBlock)
    .filter((section) => section.jsonLd !== false)
    .flatMap((section) => arr(section.questions))
    .filter((q) => q.question);

  if (!questions.length) return null;

  return {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    mainEntity: questions.map((q) => ({
      "@type": "Question",
      name: q.question,
      acceptedAnswer: { "@type": "Answer", text: stripHtml(q.reponse ?? "") },
    })),
  };
}
