import type { Metadata } from "next";
import { Montserrat } from "next/font/google";
import { DonneesStructurees } from "@/components/DonneesStructurees";
import { Entete } from "@/components/Entete";
import { PiedDePage } from "@/components/PiedDePage";
import { SITE } from "@/lib/site";
import "./globals.css";

/**
 * ── APPRENTISSAGE ────────────────────────────────────────────────────────────
 * LE LAYOUT
 * C'est ton header.php + footer.php réunis, sauf qu'ici ils *encadrent* la page
 * au lieu d'être inclus par elle. Next appelle ce composant avec la page
 * courante dans la prop `children`, et l'entête / le pied de page ne sont
 * jamais re-rendus lors d'une navigation interne.
 *
 * NEXT/FONT
 * `Montserrat(...)` télécharge la police AU BUILD et la dépose dans
 * `_next/static/media/`. Résultat : aucune requête vers fonts.googleapis.com
 * en production (donc pas de blocage de rendu, pas de fuite RGPD vers Google,
 * et un bon score Lighthouse). La police est déclarée en *variable CSS*, que
 * globals.css branche sur --font-sans.
 * Voir LEARNING.md § « Layout » et § « next/font ».
 * ─────────────────────────────────────────────────────────────────────────────
 */
const montserrat = Montserrat({
  subsets: ["latin"],
  variable: "--font-montserrat",
  // `swap` : le texte s'affiche immédiatement dans une police système, puis
  // bascule sur Montserrat. Sans ça, Lighthouse sanctionne le texte invisible.
  display: "swap",
});

/**
 * Métadonnées communes à tout le site. Chaque page complète ou écrase.
 * `metadataBase` sert de racine aux URL relatives (image OG, canoniques).
 */
export const metadata: Metadata = {
  metadataBase: new URL(SITE.url),
  title: `${SITE.nom} — logiciels sur mesure et sites internet à ${SITE.ville}`,
  description:
    "On développe les logiciels qui font tourner les lieux et les ateliers. " +
    "Réserver, ouvrir, produire, facturer — sans ressaisie.",
  authors: [{ name: SITE.nom }],
  creator: SITE.nom,
  publisher: SITE.nom,
  // Consigne d'indexation par défaut, reprise par toutes les pages.
  robots: {
    index: true,
    follow: true,
    googleBot: { index: true, follow: true, "max-image-preview": "large" },
  },
  formatDetection: { telephone: false },
};

export default function LayoutRacine({
  children,
}: Readonly<{ children: React.ReactNode }>) {
  return (
    // `lang="fr"` : critère d'accessibilité Lighthouse, et signal pour Google.
    <html lang="fr" className={montserrat.variable}>
      <body className="flex min-h-screen flex-col">
        {/* Lien d'évitement : premier élément focusable de la page, il permet
            à un visiteur au clavier de sauter la navigation. Invisible tant
            qu'il n'a pas le focus. */}
        <a
          href="#contenu"
          className="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-[60] focus:rounded-sm focus:bg-anthracite focus:px-5 focus:py-3 focus:font-bold focus:text-white"
        >
          Aller au contenu
        </a>

        <Entete />

        <main id="contenu" className="flex-1">
          {children}
        </main>

        <PiedDePage />

        {/* La fiche d'identité structurée, présente sur toutes les pages. */}
        <DonneesStructurees />
      </body>
    </html>
  );
}
