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

import JsonLd from "@/components/seo/JsonLd";
import { toBlogCard } from "@/lib/blog/content";
import { buildMetadata, SITE_URL } from "@/lib/seo";
import { getAllPosts } from "@/lib/wp/queries/post";
import Blog from "@/views/Blog";

const AUTHORS: Record<string, string> = {
  "maxime-bourassin": "Maxime Bourassin",
};

export const dynamicParams = true;

export function generateStaticParams() {
  return Object.keys(AUTHORS).map((slug) => ({ slug }));
}

export async function generateMetadata({
  params,
}: {
  params: Promise<{ slug: string }>;
}): Promise<Metadata> {
  const { slug } = await params;
  const authorName = AUTHORS[slug];
  if (!authorName) return {};

  return buildMetadata({
    title: `Articles de ${authorName} - Covalba`,
    description: `Retrouvez les articles Covalba publiés par ${authorName}.`,
    canonical: `${SITE_URL}/blog/author/${slug}`,
  });
}

export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
  const { slug } = await params;
  const authorName = AUTHORS[slug];
  if (!authorName) notFound();

  let cards = [] as ReturnType<typeof toBlogCard>[];
  try {
    cards = (await getAllPosts()).map(toBlogCard);
  } catch (error) {
    console.error("[wp] liste blog auteur indisponible :", error);
  }

  const canonical = `${SITE_URL}/blog/author/${slug}`;
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "ProfilePage",
    inLanguage: "fr-FR",
    name: `Articles de ${authorName}`,
    url: canonical,
    mainEntity: {
      "@type": "Person",
      name: authorName,
    },
  };

  return (
    <>
      <JsonLd id="blog-author-jsonld" data={jsonLd} />
      <Blog
        posts={cards}
        basePath={`/blog/author/${slug}`}
        heroTitle={`Articles de ${authorName}.`}
        heroDescription="Guides, réglementation, CEE, rénovation de toiture et retours techniques publiés sur le blog Covalba."
        heroBadge="Auteur"
      />
    </>
  );
}
