import type { Metadata } from "next";

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

const WP_URI = "/contact";
const PAGE_URL = `${SITE_URL}/contact`;
const PHONE_DISPLAY = "+33 2 38 77 57 08";
const EMAIL = "contact@covalba.fr";

// Metas historiques, conservées en fallback si WP est indisponible.
const FALLBACK_META = {
  title: "Contact Covalba : devis et informations cool roof",
  description:
    "Contactez Covalba pour un devis ou une question sur nos revêtements cool roof. Formulaire HubSpot, téléphone, e-mail et siège social à Orléans.",
  canonical: PAGE_URL,
};

// ContactPage conservé en dur (données structurées NAP) même en rendu WP.
const contactPageJsonLd = {
  "@context": "https://schema.org",
  "@type": "ContactPage",
  name: "Contact Covalba",
  url: PAGE_URL,
  description:
    "Page de contact Covalba pour les projets de revêtement réflectif cool roof, demandes de devis et informations produits.",
  mainEntity: {
    "@type": "Organization",
    name: "Covalba",
    url: "https://www.covalba.fr",
    telephone: PHONE_DISPLAY,
    email: EMAIL,
    address: {
      "@type": "PostalAddress",
      streetAddress: "23 rue Antigna",
      postalCode: "45000",
      addressLocality: "Orléans",
      addressCountry: "FR",
    },
  },
};

const jsonLd = [
  contactPageJsonLd,
  breadcrumbJsonLd([
    { name: "Accueil", url: `${SITE_URL}/` },
    { name: "Contact", url: PAGE_URL },
  ]),
];

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();

  // Vue originale dans les deux cas : sans WP elle rend ses défauts codés,
  // avec WP le mapper viewProps alimente les mêmes composants (parité pixel).
  return (
    <>
      <JsonLd id="contact-jsonld" data={jsonLd} />
      <ContactView sections={page?.sections?.sections ?? null} />
    </>
  );
}
