import clsx from 'clsx';
import 'src/styles/splash-screen.css';
import 'src/styles/index.css';
import 'leaflet/dist/leaflet.css';
import 'leaflet-geosearch/dist/geosearch.css';
import '../../public/assets/fonts/material-design-icons/MaterialIconsOutlined.css';
import '../../public/assets/fonts/inter/inter.css';
import '../../public/assets/fonts/meteocons/style.css';
import '../../public/assets/styles/prism.css';
import type { Metadata } from 'next';
import { SessionProvider } from 'next-auth/react';
import { auth } from '@auth/authJs';
import App from './App';
import { buildStoreMetadata } from '@/lib/storeSeo';

/**
 * Metadata por tenant.
 *
 * Antes esto estaba hardcodeado al boilerplate ("Fuse React - NextJS by
 * FuseTech", con `url` apuntando a fusetheme.com y `robots: follow, index`):
 * la tienda de CADA cliente se publicaba en Google con el nombre del template.
 *
 * Ahora sale del `ecommerce_config` del tenant, resuelto por subdominio. Si la
 * config no resuelve (tienda en borrador/pausada, o backend caído), se marca
 * `noindex`: no queremos que Google levante el diseño de fallback como si fuera
 * el comercio.
 */
// eslint-disable-next-line react-refresh/only-export-components
export async function generateMetadata(): Promise<Metadata> {
	return buildStoreMetadata();
}

export default async function RootLayout({
	children
}: Readonly<{
	children: React.ReactNode;
}>) {
	const session = await auth();

	return (
		<html lang="es">
			<head>
				<meta charSet="utf-8" />
				<meta
					name="viewport"
					content="width=device-width, initial-scale=1, shrink-to-fit=no"
				/>
				<meta
					name="theme-color"
					content="#000000"
				/>
				<base href="/" />
				{/*
					manifest.json provides metadata used when your web app is added to the
					homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
				*/}
				<link
					rel="manifest"
					href="/manifest.json"
				/>
				{/*
					El favicon lo inyecta `generateMetadata` (buildStoreMetadata) desde
					el `faviconUrl` del tenant. NO hardcodear <link rel="shortcut icon">
					acá: pisaba al favicon del comercio con el /favicon.ico del template.
				*/}
				<noscript id="emotion-insertion-point" />
			</head>
			<body
				id="root"
				className={clsx('loading')}
			>
				<SessionProvider
					basePath="/auth"
					session={session}
				>
					<App>{children}</App>
				</SessionProvider>
			</body>
		</html>
	);
}
