import type { ReactNode } from "react";
import { Cormorant_Garamond, Noto_Serif } from "next/font/google";

import { JsonLd } from "@/components/JsonLd";
import { SiteFooter } from "@/components/SiteFooter";
import { SiteHeader } from "@/components/SiteHeader";
import { fetchPublicSiteFooter, fetchPublicSiteMenu } from "@/lib/site-content";
import { getSiteOrigin } from "@/lib/site";

import "./globals.css";

const display = Cormorant_Garamond({
  subsets: ["latin", "vietnamese"],
  weight: ["400", "600", "700"],
  variable: "--font-ctkp-display",
  display: "swap",
});

const serif = Noto_Serif({
  subsets: ["latin", "vietnamese"],
  weight: ["400", "500", "600"],
  variable: "--font-ctkp-serif",
  display: "swap",
});

const siteOriginForMetadata = getSiteOrigin();

export const metadata = {
  ...(siteOriginForMetadata ? { metadataBase: new URL(siteOriginForMetadata) } : {}),
  title: {
    default: "Cổ Thư Kỳ Phổ",
    template: "%s · Cổ Thư Kỳ Phổ",
  },
  description:
    "Cổ Thư Kỳ Phổ — sổ chữ xưa, lá số và quẻ Dịch; mời đọc chậm, chiêm nghiệm ôn hòa.",
  openGraph: {
    type: "website",
    locale: "vi_VN",
    siteName: "Cổ Thư Kỳ Phổ",
    title: "Cổ Thư Kỳ Phổ",
    description:
      "Sổ chữ xưa, lá số Tử Vi và quẻ Dịch — mời đọc chậm, chiêm nghiệm ôn hòa.",
  },
};

export default async function RootLayout({ children }: { children: ReactNode }) {
  const siteOrigin = getSiteOrigin();
  const [cmsMenu, cmsFooter] = await Promise.all([
    fetchPublicSiteMenu(),
    fetchPublicSiteFooter(),
  ]);

  return (
    <html lang="vi" className={`${display.variable} ${serif.variable}`}>
      <body className="font-ctkp-serif flex min-h-screen flex-col overflow-x-clip bg-ctkp-night antialiased leading-relaxed text-[color:var(--ctkp-text-main)]/96">
        {siteOrigin ? (
          <JsonLd
            data={{
              "@context": "https://schema.org",
              "@graph": [
                {
                  "@type": "Organization",
                  "@id": `${siteOrigin}/#organization`,
                  name: "Cổ Thư Kỳ Phổ",
                  url: siteOrigin,
                },
                {
                  "@type": "WebSite",
                  "@id": `${siteOrigin}/#website`,
                  url: siteOrigin,
                  name: "Cổ Thư Kỳ Phổ",
                  inLanguage: "vi",
                  publisher: { "@id": `${siteOrigin}/#organization` },
                },
              ],
            }}
          />
        ) : null}
        <SiteHeader cmsMenu={cmsMenu} />
        {children}
        <SiteFooter cmsFooter={cmsFooter} />
        {process.env.NODE_ENV === "development" &&
        !process.env.NEXT_PUBLIC_API_BASE_URL?.trim() ? (
          <p
            className="mx-auto -mt-8 mb-8 max-w-xl px-4 text-center text-[10px] leading-relaxed text-stone-500 sm:px-8"
            role="status"
          >
            Chưa có <code className="text-amber-200/55">NEXT_PUBLIC_API_BASE_URL</code> — sao chép{" "}
            <code className="text-amber-200/55">.env.example</code> thành{" "}
            <code className="text-amber-200/55">.env.local</code>, trỏ tới backend (ví dụ{" "}
            <code className="text-amber-200/55">http://localhost:3000</code>), rồi chạy lại{" "}
            <code className="text-amber-200/55">npm run dev</code>.
          </p>
        ) : null}
      </body>
    </html>
  );
}
