import type { Metadata } from "next";
import { notFound } from "next/navigation";

import JsonLd from "@/components/seo/JsonLd";
import ReferenceDetail from "@/views/ReferenceDetail";
import { referenceCanonicalPath } from "@/lib/frProdRoutes";
import { SITE_URL } from "@/lib/seo";
import { mapImage } from "@/lib/wp/mappers";
import { getAllReferenceSlugs, getReference } from "@/lib/wp/queries/reference";
import { breadcrumbJsonLd, wpSeoToMetadata } from "@/lib/wp/seoToMetadata";
import { toCustomerReference } from "@/lib/wp/toCustomerReference";

// Pages références chantier pilotées par WordPress (CPT `reference`), rendues
// par la vue d'ORIGINE (ReferenceDetail) via le mapper inverse
// toCustomerReference (parité pixel, fallback codé champ à champ).
export const dynamicParams = true;

export async function generateStaticParams() {
  const slugs = await getAllReferenceSlugs();
  return slugs.map((slug) => ({ slug }));
}

export async function generateMetadata({
  params,
}: {
  params: Promise<{ slug: string }>;
}): Promise<Metadata> {
  const { slug } = await params;
  const reference = await getReference(slug);
  if (!reference) return {};
  const canonical = `${SITE_URL}${referenceCanonicalPath(slug)}`;

  return wpSeoToMetadata({ ...reference.seo, canonical }, {
    title: reference.title ?? undefined,
    canonical,
  });
}

export default async function Page({
  params,
}: {
  params: Promise<{ slug: string }>;
}) {
  const { slug } = await params;
  const reference = await getReference(slug);
  if (!reference) notFound();

  const pageUrl = `${SITE_URL}${referenceCanonicalPath(slug)}`;
  const ogImage = mapImage(reference.seo?.ogImage);

  const articleJsonLd = {
    "@context": "https://schema.org",
    "@type": "Article",
    headline: reference.title ?? slug,
    ...(reference.seo?.metaDescription
      ? { description: reference.seo.metaDescription }
      : {}),
    ...(ogImage ? { image: ogImage.sourceUrl } : {}),
    url: pageUrl,
    about:
      reference.ficheReference?.produit?.nodes?.[0]?.title ?? "Cool roof Covalba",
  };

  return (
    <>
      <JsonLd
        id={`reference-${slug}-jsonld`}
        data={[
          articleJsonLd,
          breadcrumbJsonLd([
            { name: "Accueil", url: `${SITE_URL}/` },
            { name: "Références", url: `${SITE_URL}/references` },
            { name: reference.title ?? slug, url: pageUrl },
          ]),
        ]}
      />
      <ReferenceDetail slug={slug} reference={toCustomerReference(reference)} />
    </>
  );
}
