import { existsSync, readFileSync } from "node:fs";
import path from "node:path";

import type { Metadata } from "next";
import { Manrope } from "next/font/google";
import "animate.css";

import "./globals.css";

import { SessionProvider } from "../components/layout/session-provider";
import { RuntimeUiConfigProvider, type RuntimeUiConfig } from "../components/layout/runtime-ui-config-provider";

const manrope = Manrope({
  subsets: ["latin"],
  variable: "--font-manrope"
});

export const metadata: Metadata = {
  title: "Rental System",
  description: "Zarządzanie wynajmem sprzętu IT z osią czasu rezerwacji"
};

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

const runtimeConfigCandidates = () => [
  path.resolve(process.cwd(), "public/runtime/ui-config.json"),
  path.resolve(process.cwd(), "apps/web/public/runtime/ui-config.json")
];

const readRuntimeUiConfig = (): RuntimeUiConfig | null => {
  for (const candidate of runtimeConfigCandidates()) {
    if (!existsSync(candidate)) {
      continue;
    }

    try {
      return JSON.parse(readFileSync(candidate, "utf8")) as RuntimeUiConfig;
    } catch {
      return null;
    }
  }

  return null;
};

export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
  const runtimeUiConfig = readRuntimeUiConfig();

  return (
    <html lang="pl">
      <head>
        <link href="/runtime/ui-overrides.css" rel="stylesheet" />
      </head>
      <body className={`${manrope.variable} font-sans`}>
        <SessionProvider>
          <RuntimeUiConfigProvider initialConfig={runtimeUiConfig}>{children}</RuntimeUiConfigProvider>
        </SessionProvider>
      </body>
    </html>
  );
}
