import type { Metadata } from "next";

import JsonLd from "@/components/seo/JsonLd";
import { buildMetadata, SITE_URL } from "@/lib/seo";
import { faqPageJsonLd } from "@/lib/wp/faqJsonLd";
import { getWpPage } from "@/lib/wp/queries/page";
import { breadcrumbJsonLd, wpSeoToMetadata } from "@/lib/wp/seoToMetadata";
import type { WpPage } from "@/lib/wp/types";
import PrimeCEECoolRoofView from "./view-client";

const WP_URI = "/bat-en-112";
const PAGE_URL = `${SITE_URL}/bat-en-112`;

// Metas historiques, conservées en fallback si WP est indisponible.
const FALLBACK_META = {
  title: "Prime CEE cool roof (BAT-EN-112) : montant et éligibilité",
  description:
    "Prime CEE cool roof via la fiche BAT-EN-112 : barème par zone, montant, conditions d’éligibilité. Financez votre toiture réflective. CovaTherm éligible (SRI 119).",
  canonical: PAGE_URL,
};

// Recopie des FAQ affichées par la vue src/views/PrimeCEECoolRoof.tsx.
// Utilisée uniquement en fallback : en rendu WP, le block faq émet le FAQPage JSON-LD.
const faqs = [
  {
    q: "Mon bâtiment est-il éligible ?",
    a: "La BAT-EN-112 vise les bâtiments tertiaires à usage commercial, comme les magasins et galeries marchandes, climatisés par pompe à chaleur, dont la toiture n’a pas encore de revêtement réflectif. Les sites industriels, les bureaux, les collectivités et le résidentiel ne sont pas éligibles.",
  },
  {
    q: "Combien vais-je toucher ?",
    a: "Cela dépend de votre zone climatique (160 à 270 kWh cumac/m²), de votre surface et du cours du CEE. Pour une toiture de 5 000 m², la prime se situe en général entre quelques milliers d’euros en zone H1 et plus de 10 000 € en zone H3. Le calcul précis se fait au devis.",
  },
  {
    q: "Pourquoi le Sud rapporte-t-il plus ?",
    a: "Parce que le cool roof fait économiser de la climatisation, et c’est dans le Sud que ces économies sont les plus importantes. Le barème valorise donc davantage la zone H3.",
  },
  {
    q: "La prime est-elle cumulable ?",
    a: "La BAT-EN-112 n’est pas cumulable avec la fiche BAT-EN-109. Elle peut en revanche s’inscrire dans une trajectoire décret tertiaire.",
  },
  {
    q: "Quel produit choisir pour rester éligible ?",
    a: "Un revêtement qui conserve un SRI supérieur à 90 après vieillissement sur 20 ans. C’est le cas de CovaTherm (SRI 118 vieilli), là où beaucoup d’acryliques perdent leur blancheur en quelques années.",
  },
  {
    q: "Qui s’occupe du dossier ?",
    a: "Nous vous accompagnons dans la démarche, de la vérification d’éligibilité à la constitution du dossier. Le niveau exact de prise en charge est confirmé au moment du projet.",
  },
];

const fallbackJsonLd = [
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    name: "Prime CEE cool roof BAT-EN-112",
    url: PAGE_URL,
    description:
      "Barème, montant, conditions d’éligibilité et process de la prime CEE cool roof BAT-EN-112.",
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    mainEntity: faqs.map((faq) => ({
      "@type": "Question",
      name: faq.q,
      acceptedAnswer: { "@type": "Answer", text: faq.a },
    })),
  },
];

async function fetchPage(): Promise<WpPage | null> {
  try {
    const page = await getWpPage(WP_URI);
    if (!page) console.warn(`[wp] page ${WP_URI} introuvable, fallback vue codée.`);
    return page;
  } catch (error) {
    console.error(`[wp] page ${WP_URI} indisponible, fallback vue codée :`, error);
    return null;
  }
}

export async function generateMetadata(): Promise<Metadata> {
  const page = await fetchPage();
  if (!page) return buildMetadata(FALLBACK_META);
  return wpSeoToMetadata(page.seo, FALLBACK_META);
}

export default async function Page() {
  const page = await fetchPage();

  if (!page) {
    return (
      <>
        <JsonLd id="prime-cee-cool-roof-jsonld" data={fallbackJsonLd} />
        <PrimeCEECoolRoofView sections={null} />
      </>
    );
  }

  // FAQPage JSON-LD reconstruit depuis le block faq WP (auparavant émis par
  // le block faq du BlockRenderer) : la vue originale n'en émet pas.
  const sections = page.sections?.sections ?? null;
  const wpFaqJsonLd = faqPageJsonLd(sections);

  return (
    <>
      {wpFaqJsonLd && (
        <JsonLd id="prime-cee-cool-roof-faq-jsonld" data={wpFaqJsonLd} />
      )}
      <JsonLd
        id="prime-cee-cool-roof-breadcrumb-jsonld"
        data={breadcrumbJsonLd([
          { name: "Accueil", url: `${SITE_URL}/` },
          { name: "Prime CEE cool roof (BAT-EN-112)", url: PAGE_URL },
        ])}
      />
      <PrimeCEECoolRoofView sections={sections} />
    </>
  );
}
