import type { Metadata } from "next";
import { Bebas_Neue, Inter, Crimson_Pro } from "next/font/google";
import { Toaster } from "react-hot-toast";
import "./globals.css";
import { siteConfig } from "@/lib/site-config";
import Navbar from "@/components/layout/Navbar";
import Footer from "@/components/layout/Footer";
import { headers } from "next/headers";
import { store } from "@/lib/store";

const bebasNeue = Bebas_Neue({
  subsets: ["latin"],
  weight: "400",
  variable: "--font-display",
  display: "swap",
});

const inter = Inter({
  subsets: ["latin"],
  weight: ["300", "400", "500", "600", "700"],
  variable: "--font-body",
  display: "swap",
});

const crimsonPro = Crimson_Pro({
  subsets: ["latin"],
  weight: ["400", "600"],
  style: ["italic"],
  variable: "--font-accent",
  display: "swap",
});

export const metadata: Metadata = {
  metadataBase: new URL(siteConfig.url),
  title: {
    default: `${siteConfig.name} — Shotokan Karate in Arbon`,
    template: `%s — ${siteConfig.name}`,
  },
  description: siteConfig.description,
  openGraph: {
    type: "website",
    locale: "de_CH",
    url: siteConfig.url,
    siteName: siteConfig.name,
    title: `${siteConfig.name} — Shotokan Karate in Arbon`,
    description: siteConfig.description,
  },
  twitter: {
    card: "summary",
    title: `${siteConfig.name} — Shotokan Karate in Arbon`,
    description: siteConfig.description,
  },
};

const DAY_MAP: Record<string, string> = {
  Montag: "Monday", Dienstag: "Tuesday", Mittwoch: "Wednesday",
  Donnerstag: "Thursday", Freitag: "Friday", Samstag: "Saturday", Sonntag: "Sunday",
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  const headersList = headers();
  const pathname = headersList.get("x-pathname") ?? "";
  const isAdmin = pathname.startsWith("/admin") || pathname.startsWith("/dojo-intern");

  const activeSessions = store.trainingSessions.read().filter((s) => s.aktiv);
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "SportsClub",
    name: siteConfig.name,
    description:
      "Traditionelles Shotokan-Karate (JKA) in Arbon am Bodensee, unter der Leitung von Roland Ammermüller, 5. Dan.",
    sport: "Karate",
    url: siteConfig.url,
    telephone: siteConfig.contact.phone,
    email: siteConfig.contact.email,
    address: {
      "@type": "PostalAddress",
      ...(siteConfig.address.street ? { streetAddress: siteConfig.address.street } : {}),
      addressLocality: siteConfig.address.city,
      postalCode: siteConfig.address.zip,
      addressRegion: siteConfig.address.canton,
      addressCountry: siteConfig.address.country,
    },
    geo: { "@type": "GeoCoordinates", latitude: siteConfig.geo.lat, longitude: siteConfig.geo.lng },
    openingHoursSpecification: activeSessions.map((s) => ({
      "@type": "OpeningHoursSpecification",
      dayOfWeek: DAY_MAP[s.tag] ?? s.tag,
      opens: s.startTime,
      closes: s.endTime,
    })),
    ...(siteConfig.social.instagram ? { sameAs: [siteConfig.social.instagram] } : {}),
  };

  if (isAdmin) {
    return (
      <html lang="de">
        <body style={{ margin: 0 }}>{children}</body>
      </html>
    );
  }

  return (
    <html lang="de">
      <body
        className={`${bebasNeue.variable} ${inter.variable} ${crimsonPro.variable} font-body bg-cream text-secondary antialiased`}
      >
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
        />
        <a href="#main-content" className="skip-link">
          Zum Hauptinhalt springen
        </a>
        <Navbar />
        <main id="main-content">{children}</main>
        <Footer />
        <Toaster position="bottom-center" />
      </body>
    </html>
  );
}
