import type { ReactNode } from "react";
import { unstable_noStore as noStore } from "next/cache";
import { getLocale } from "next-intl/server";
import { redirect } from "next/navigation";

import { SiteAmbientBackdrop } from "@/components/layout/site-ambient-backdrop";
import { SiteFooter } from "@/components/layout/site-footer";
import { SiteHeader } from "@/components/layout/site-header";
import { ScrollSmootherProvider } from "@/components/scroll-smoother-provider";
import { isSuperAdmin } from "@/lib/admin-auth";
import { getMaintenanceMode, getSiteSettings, getSiteSettingsMediaBindings } from "@/lib/app-config";
import { getLocalizedPath, resolveLocale } from "@/lib/locale";

type SiteLayoutProps = {
  children: ReactNode;
  params: Promise<{
    locale: string;
  }>;
};

export const dynamic = "force-dynamic";
export const revalidate = 0;

export default async function SiteLayout({ children, params }: SiteLayoutProps) {
  noStore();
  await params;
  const [maintenanceEnabled, mediaBindings, siteSettings] = await Promise.all([
    getMaintenanceMode(),
    getSiteSettingsMediaBindings(),
    getSiteSettings(),
  ]);
  const localeKey = resolveLocale(await getLocale().catch(() => siteSettings.defaultLocale), siteSettings.defaultLocale);
  // Server-side decision only. The header receives just this boolean and uses
  // it purely to show/hide the Admin shortcut link — it grants no access by
  // itself. Every admin page/action re-checks the session independently, so
  // this value is not a security boundary, only a UI convenience.
  const authenticated = await isSuperAdmin();

  if (maintenanceEnabled && !authenticated) {
    redirect(getLocalizedPath(localeKey, "/coming-soon", siteSettings.defaultLocale));
  }

  return (
    <>
      <ScrollSmootherProvider />
      <SiteAmbientBackdrop />
      <SiteHeader
        lightLogoUrl={mediaBindings.siteLogoLight?.url}
        darkLogoUrl={mediaBindings.siteLogoDark?.url}
        defaultLocale={siteSettings.defaultLocale}
        isSuperAdmin={authenticated}
      />
      <div id="smooth-wrapper">
        <div id="smooth-content">
          <div className="site-content-frame flex min-h-screen flex-col">
            <main className="flex-1">{children}</main>
            <SiteFooter defaultLocale={siteSettings.defaultLocale} />
          </div>
        </div>
      </div>
    </>
  );
}
