import type { Metadata, Viewport } from "next";
import { Dancing_Script, Inter, Lora } from "next/font/google";
import "./globals.css";
import HeaderClient from "@/components/HeaderClient";
import Providers from "@/components/Providers";
import SiteChrome from "@/components/SiteChrome";
import { getSiteConfig, getPaymentText, getDrawDate, formatDrawDate } from "@/lib/site-config";
import { prisma } from "@/lib/prisma";
import ChatBot, { type ChatBotInfo } from "@/components/ChatBot";
import { BRAND, getSiteUrl } from "@/lib/brand";
import SiteAnalytics from "@/components/SiteAnalytics";

const inter = Inter({ subsets: ["latin"] });
const lora = Lora({ subsets: ["latin"], variable: "--font-lora" });
const script = Dancing_Script({ subsets: ["latin"], weight: ["700"], variable: "--font-script-face" });

const SITE_URL = getSiteUrl();
const DEFAULT_TITLE = `${BRAND.name} - Sorteo solidario | ${BRAND.org}`;
const DESCRIPTION =
  `Participa en el sorteo solidario de ${BRAND.org}. Cada boleto financia cuidado, contención y nuevas oportunidades para niños, niñas y adolescentes.`;

// IDs de analítica propios de este proyecto (vacío = desactivado)
const GA_ID = process.env.NEXT_PUBLIC_GA_ID || "G-J0H73X2Z1K";
const META_PIXEL_ID = process.env.NEXT_PUBLIC_META_PIXEL_ID || "";

export const metadata: Metadata = {
  metadataBase: new URL(SITE_URL),
  title: {
    default: DEFAULT_TITLE,
    template: `%s | ${BRAND.name}`,
  },
  description: DESCRIPTION,
  keywords: [
    "sorteo solidario",
    BRAND.name,
    BRAND.org,
    "boletos",
    "sorteo Chile",
    "fundación",
    "Mercado Pago",
    "verificar números",
  ],
  authors: [{ name: BRAND.org }],
  creator: BRAND.org,
  openGraph: {
    type: "website",
    locale: "es_CL",
    url: SITE_URL,
    siteName: BRAND.name,
    title: DEFAULT_TITLE,
    description: DESCRIPTION,
    images: [{ url: "/logo-fundacion.png", width: 256, height: 256, alt: BRAND.name }],
  },
  twitter: {
    card: "summary_large_image",
    title: DEFAULT_TITLE,
    description: DESCRIPTION,
  },
  robots: {
    index: true,
    follow: true,
  },
  icons: {
    icon: "/logo-fundacion.png",
    shortcut: "/logo-fundacion.png",
    apple: "/logo-fundacion.png",
  },
  alternates: {
    canonical: SITE_URL,
  },
};

export const viewport: Viewport = {
  width: "device-width",
  initialScale: 1,
  maximumScale: 5,
  themeColor: "#ffffff",
};

export const dynamic = "force-dynamic";

export default async function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  const siteConfig = await getSiteConfig();
  const contactUrl = siteConfig.contact_url || "";
  const merchEnabled = siteConfig.merch_enabled === "true";

  const [packs, promos] = await Promise.all([
    prisma.product
      .findMany({
        where: { type: { not: "PHYSICAL" }, stock: { gt: 0 } },
        select: { price: true, ticketCount: true },
        orderBy: { price: "asc" },
      })
      .catch(() => []),
    prisma.promo
      .findMany({ where: { active: true }, select: { title: true }, orderBy: [{ order: "asc" }, { createdAt: "asc" }] })
      .catch(() => []),
  ]);
  const prizeName = siteConfig.prize_name || "gran premio";
  const chatInfo: ChatBotInfo = {
    prizeName,
    prizeSubtitle: siteConfig.prize_subtitle || "",
    // El primer premio suele ser el mismo del hero; se listan los demás
    extraPrizes: promos.map((p) => p.title).filter((t) => !t.toLowerCase().includes(prizeName.toLowerCase())),
    packs: packs.map((p) => ({ count: p.ticketCount, price: p.price })),
    drawDateText: formatDrawDate(getDrawDate(siteConfig)),
    drawPlace: siteConfig.draw_place || "",
    authorization: siteConfig.draw_authorization || "",
    paymentText: getPaymentText(siteConfig),
    contactUrl,
    contactEmail: siteConfig.contact_email || "",
    contactPhone: siteConfig.contact_phone || "",
  };

  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Organization",
    name: BRAND.org,
    url: SITE_URL,
    logo: `${SITE_URL}/logo-fundacion.png`,
    description: DESCRIPTION,
  };

  return (
    <html lang="es" className={`scroll-smooth ${lora.variable} ${script.variable}`} suppressHydrationWarning>
      <body className={`${inter.className} min-h-screen bg-white text-brand-ink antialiased`}>
        <Providers>
          <script
            type="application/ld+json"
            dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
          />
          <HeaderClient
            contactUrl={contactUrl}
            resultsEnabled={siteConfig.draw_results_enabled === "true"}
            merchEnabled={merchEnabled}
          />

          {children}

          <SiteChrome
            contactUrl={contactUrl}
            resultsEnabled={siteConfig.draw_results_enabled === "true"}
            results2Enabled={siteConfig.draw_results_2_enabled === "true"}
            instagramUrl={siteConfig.social_instagram_url || ""}
            tiktokUrl={siteConfig.social_tiktok_url || ""}
            facebookUrl={siteConfig.social_facebook_url || ""}
            contactEmail={siteConfig.contact_email || ""}
            contactPhone={siteConfig.contact_phone || ""}
            foundationUrl={siteConfig.foundation_url || ""}
          />
          <ChatBot info={chatInfo} />
          <SiteAnalytics gaId={GA_ID} metaPixelId={META_PIXEL_ID} />
        </Providers>
      </body>
    </html>
  );
}
