import type { Metadata, Viewport } from "next";
import {
  Fraunces,
  Instrument_Serif,
  Inter,
  JetBrains_Mono,
} from "next/font/google";
import "./globals.css";
import { SITE, PERSON } from "@/lib/site";
import SmoothScroll from "@/components/SmoothScroll";
import Cursor from "@/components/Cursor";
import Grain from "@/components/Grain";
import Nav from "@/components/Nav";
import Footer from "@/components/Footer";

const fraunces = Fraunces({
  subsets: ["latin"],
  variable: "--font-fraunces",
  axes: ["opsz"],
});

const instrument = Instrument_Serif({
  subsets: ["latin"],
  weight: "400",
  style: ["normal", "italic"],
  variable: "--font-instrument",
});

const inter = Inter({
  subsets: ["latin"],
  variable: "--font-inter",
});

const jetbrains = JetBrains_Mono({
  subsets: ["latin"],
  variable: "--font-jetbrains",
});

export const metadata: Metadata = {
  metadataBase: new URL(SITE.url),
  title: {
    default: SITE.title,
    template: "%s | Damian Michael",
  },
  description: SITE.description,
  keywords: [
    "Damian Michael CEO",
    "Innovo Networks CEO",
    "ICT leader South Africa",
    "digital transformation SME South Africa",
    "cybersecurity expert Cape Town",
    "POPIA compliance consultant",
    "AI for African SMEs",
  ],
  authors: [{ name: PERSON.name, url: SITE.url }],
  creator: PERSON.name,
  alternates: { canonical: "/" },
  openGraph: {
    type: "website",
    url: SITE.url,
    siteName: "Damian Michael",
    title: SITE.title,
    description: SITE.description,
    locale: "en_ZA",
    images: [
      {
        url: "/images/damian-michael-cape-town-skyline-hero.jpg",
        width: 1920,
        height: 1080,
        alt: "Cape Town skyline at golden hour — Damian Michael, CEO of Innovo Networks",
      },
    ],
  },
  twitter: {
    card: "summary_large_image",
    title: SITE.title,
    description: SITE.description,
    images: ["/images/damian-michael-cape-town-skyline-hero.jpg"],
  },
  robots: {
    index: true,
    follow: true,
    googleBot: { index: true, follow: true, "max-image-preview": "large" },
  },
};

export const viewport: Viewport = {
  themeColor: "#0A0A0B",
  width: "device-width",
  initialScale: 1,
};

const jsonLd = {
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Person",
      "@id": `${SITE.url}/#damian`,
      name: PERSON.name,
      jobTitle: "Managing Director & CEO",
      worksFor: { "@id": `${SITE.url}/#innovo` },
      url: SITE.url,
      email: `mailto:${SITE.email}`,
      image: `${SITE.url}/images/damian-michael-ceo-boardroom-cape-town.webp`,
      address: {
        "@type": "PostalAddress",
        addressLocality: "Cape Town",
        addressCountry: "ZA",
      },
      knowsAbout: [
        "Connectivity",
        "Cloud computing",
        "Cybersecurity",
        "Artificial intelligence",
        "POPIA compliance",
        "Digital transformation",
        "African ICT",
      ],
      sameAs: PERSON.sameAs,
    },
    {
      "@type": ["Organization", "LocalBusiness"],
      "@id": `${SITE.url}/#innovo`,
      name: PERSON.company,
      alternateName: "Innovo Networks",
      slogan: PERSON.companyTagline,
      url: PERSON.companyUrl,
      founder: { "@id": `${SITE.url}/#damian` },
      address: {
        "@type": "PostalAddress",
        addressLocality: "Cape Town",
        addressRegion: "Western Cape",
        addressCountry: "ZA",
      },
      geo: {
        "@type": "GeoCoordinates",
        latitude: PERSON.geo.lat,
        longitude: PERSON.geo.lng,
      },
      areaServed: ["South Africa", "Kenya"],
      sameAs: ["https://www.crunchbase.com/organization/innovo-networks"],
    },
    {
      "@type": "WebSite",
      "@id": `${SITE.url}/#website`,
      url: SITE.url,
      name: "Damian Michael",
      publisher: { "@id": `${SITE.url}/#damian` },
      inLanguage: "en-ZA",
    },
  ],
};

export default function RootLayout({
  children,
}: Readonly<{ children: React.ReactNode }>) {
  return (
    <html
      lang="en-ZA"
      className={`${fraunces.variable} ${instrument.variable} ${inter.variable} ${jetbrains.variable}`}
    >
      <head>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
        />
        {/* Plausible — cookieless, POPIA-friendly analytics */}
        <script
          defer
          data-domain="damianmichael.co.za"
          src="https://plausible.io/js/script.js"
        />
        {/* Microsoft Clarity — add project ID then uncomment in HANDOVER.md */}
      </head>
      <body>
        <SmoothScroll />
        <Cursor />
        <Grain />
        <Nav />
        <main>{children}</main>
        <Footer />
      </body>
    </html>
  );
}