import type { Metadata } from "next";
import { Suspense } from "react";
import { Poppins, Cormorant_Garamond } from "next/font/google";
import "./globals.css";
import { prisma } from "@/lib/prisma";
import { getCurrentCustomerId } from "@/lib/customer-auth";
import { CartProvider } from "@/lib/cart-context";
import { WishlistProvider } from "@/lib/wishlist-context";
import { SalesSettingsProvider } from "@/lib/sales-settings-context";
import { DEFAULT_CHECKOUT_PAUSED_MESSAGE } from "@/lib/site";
import Header from "@/components/Header";
import Footer from "@/components/Footer";
import WhatsAppButton from "@/components/WhatsAppButton";
import MobileTabBar from "@/components/MobileTabBar";
import BackToTopButton from "@/components/BackToTopButton";
import DisableRightClick from "@/components/DisableRightClick";
import OfferBanner from "@/components/OfferBanner";
import FlashOfferPopup from "@/components/FlashOfferPopup";
import SuccessToast from "@/components/SuccessToast";

const cormorant = Cormorant_Garamond({
  variable: "--font-heading",
  subsets: ["latin"],
  weight: ["500", "600", "700"],
});

const poppins = Poppins({
  variable: "--font-body",
  subsets: ["latin"],
  weight: ["400", "500", "600", "700"],
});

export const metadata: Metadata = {
  metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || "http://localhost:3000"),
  title: "Iniyaval Return Gifts",
  description:
    "Customized & premium return gifts for weddings, birthdays, and baby showers, plus corporate & bulk orders — India & international delivery.",
  openGraph: {
    title: "Iniyaval Return Gifts",
    description:
      "Customized & premium return gifts for weddings, birthdays, and baby showers, plus corporate & bulk orders.",
    images: ["/brand/logo.png"],
  },
};

export default async function RootLayout({ children }: { children: React.ReactNode }) {
  const categoryRows = await prisma.category.findMany({
    where: { parentId: null },
    orderBy: [{ sortOrder: "asc" }, { name: "asc" }],
    select: {
      id: true,
      name: true,
      slug: true,
      _count: { select: { products: { where: { active: true } } } },
      children: {
        orderBy: [{ sortOrder: "asc" }, { name: "asc" }],
        select: { id: true, name: true, slug: true },
      },
    },
  });
  const categories = categoryRows.map((c) => ({
    id: c.id,
    name: c.name,
    slug: c.slug,
    productCount: c._count.products,
    children: c.children,
  }));
  const storeSettings = await prisma.storeSettings.findFirst();
  const salesEnabled = storeSettings?.salesEnabled ?? true;
  const pausedMessage = storeSettings?.checkoutPausedMessage?.trim() || DEFAULT_CHECKOUT_PAUSED_MESSAGE;
  const isLoggedIn = !!(await getCurrentCustomerId());
  const featuredOfferRow = await prisma.festivalOffer.findFirst({
    where: { showOnHomepage: true, active: true, startsAt: { lte: new Date() }, endsAt: { gte: new Date() } },
    select: { id: true, name: true, discountPercent: true, endsAt: true },
  });
  const featuredOffer = featuredOfferRow
    ? { id: featuredOfferRow.id, name: featuredOfferRow.name, discountPercent: featuredOfferRow.discountPercent, endsAt: featuredOfferRow.endsAt.toISOString() }
    : null;

  return (
    <html lang="en" className={`${cormorant.variable} ${poppins.variable} h-full`}>
      <body className="min-h-full flex flex-col bg-rose-50/40 text-stone-800 antialiased">
        <SalesSettingsProvider salesEnabled={salesEnabled} pausedMessage={pausedMessage}>
          <CartProvider>
            <WishlistProvider>
              <DisableRightClick />
              <Suspense fallback={null}>
                <OfferBanner offer={featuredOffer} />
                <Header categories={categories} isLoggedIn={isLoggedIn} />
              </Suspense>
              <main className="flex-1 pb-16 sm:pb-0 print:pb-0">{children}</main>
              <div className="print:hidden">
                <Footer />
                <WhatsAppButton />
                <BackToTopButton />
                <MobileTabBar />
              </div>
              <FlashOfferPopup offer={featuredOffer} />
              <Suspense fallback={null}>
                <SuccessToast />
              </Suspense>
            </WishlistProvider>
          </CartProvider>
        </SalesSettingsProvider>
      </body>
    </html>
  );
}
