import type { Metadata } from "next";
import { Poppins } from "next/font/google";
import "./globals.css";
import "@fortawesome/fontawesome-free/css/all.min.css";
import "react-toastify/dist/ReactToastify.css";
import { UIProvider } from "@/components/ui-context";
import PasswordExpiryGuard from "@/components/PasswordExpiryGuard";

// Velzon-style typography: Poppins across the app.
const poppins = Poppins({
  variable: "--font-poppins",
  subsets: ["latin"],
  weight: ["400", "500", "600", "700"],
  display: "swap",
});

export const metadata: Metadata = {
  title: "TA-ATS Portal",
  description: "Applicant Tracking System",
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html
      lang="en"
      className={`${poppins.variable} h-full antialiased`}
      suppressHydrationWarning
    >
      <head>
        <script
          dangerouslySetInnerHTML={{
            __html: `
              try {
                if (localStorage.getItem('theme') === 'dark') {
                  document.documentElement.classList.add('dark');
                } else {
                  document.documentElement.classList.remove('dark');
                }
              } catch (_) {}
              
              // Override Date formatting globally to enforce DD/MM/YYYY format
              try {
                const originalToLocaleDateString = Date.prototype.toLocaleDateString;
                Date.prototype.toLocaleDateString = function (locales, options) {
                  if (isNaN(this.getTime())) return '—';
                  return originalToLocaleDateString.call(this, 'en-GB', {
                    day: '2-digit',
                    month: '2-digit',
                    year: 'numeric'
                  });
                };

                const originalToLocaleString = Date.prototype.toLocaleString;
                Date.prototype.toLocaleString = function (locales, options) {
                  if (isNaN(this.getTime())) return '—';
                  const timeOptions = {};
                  if (options) {
                    if (options.hour) timeOptions.hour = options.hour;
                    if (options.minute) timeOptions.minute = options.minute;
                    if (options.second) timeOptions.second = options.second;
                    if (options.hour12 !== undefined) timeOptions.hour12 = options.hour12;
                  }
                  return originalToLocaleString.call(this, 'en-GB', {
                    day: '2-digit',
                    month: '2-digit',
                    year: 'numeric',
                    ...timeOptions
                  });
                };
              } catch (_) {}
            `,
          }}
        />
      </head>
      <body className="min-h-full flex flex-col bg-[#f3f3f9] dark:bg-slate-950 text-slate-900 dark:text-slate-100 transition-colors duration-200">
        <UIProvider>
          <PasswordExpiryGuard>{children}</PasswordExpiryGuard>
        </UIProvider>
      </body>
    </html>
  );
}
