import { hasLocale, Locale, NextIntlClientProvider } from "next-intl";
import { routing } from "@/i18n/routing";
import { notFound } from "next/navigation";
import { metaObject } from "@/config/site.config";
import "react-toastify/dist/ReactToastify.css";
import { getLocale, getMessages } from "next-intl/server";
import { Providers } from "./providers";
import QueryProvider from "@/components/QueryProvider";
import SessionProvider from "@/auth/session-provider";
import getServerSession from "@/auth/get-server-session";
import {
  fetchFooterLinks,
  fetchFooterSettings,
  fetchGeneralSettings,
} from "@/lib/api";
import { OrganizationJsonLd, WebsiteJsonLd } from "@/components/seo/JsonLd";
import WhatsAppWidget from "@/components/WhatsAppWidget";

export async function generateMetadata() {
  return metaObject();
}

const RootLayout = async ({
  children,
  params,
}: {
  children: React.ReactNode;
  params: Promise<{ lang: Locale }>;
}) => {
  const [messages, locale, session] = await Promise.all([
    getMessages(),
    getLocale(),
    getServerSession(),
  ]);
  const { lang } = await params;

  if (!hasLocale(routing.locales, lang)) {
    notFound();
  }

  const direction = lang === "ar" ? "rtl" : "ltr";

  const [footerSettingsRaw, footerLinks, generalSettings] = await Promise.all([
    fetchFooterSettings(lang).catch(() => ({})),
    fetchFooterLinks(lang).catch(() => []),
    fetchGeneralSettings(lang).catch(() => ({})),
  ]);

  // دمج الإعدادات العامة مع إعدادات الفوتر حتى يتمكن الفوتر من
  // قراءة مفاتيح مثل android_app_url و ios_app_url مباشرة
  const footerSettings = {
    ...(generalSettings as any),
    ...(footerSettingsRaw as any),
  };

  return (
    <>
      <OrganizationJsonLd locale={lang} />
      <WebsiteJsonLd locale={lang} />
      <link
        rel="stylesheet"
        href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap"
      />
      <NextIntlClientProvider messages={messages} locale={lang}>
        <QueryProvider>
          <SessionProvider session={session}>
            <Providers
              footerSettings={footerSettings}
              footerLinks={footerLinks}
            >
              {children}
              {/* WhatsApp widget: read WhatsApp number from general settings */}
              <WhatsAppWidget />
            </Providers>
          </SessionProvider>
        </QueryProvider>
      </NextIntlClientProvider>
    </>
  );
};

export default RootLayout;
