import type { Metadata } from "next";
import Navbar from "./_components/navbar/Navbar";
import { redirect } from "next/navigation";
import { getServerSession } from "../api/auth/[...nextauth]/auth";
import { Error } from "_components/Error";
import { prisma } from "@repo/db";

export const metadata: Metadata = {
	title: "VAR: Pilot",
	description: "Die neue VAR Leitstelle.",
};

export default async function RootLayout({
	children,
}: Readonly<{
	children: React.ReactNode;
}>) {
	const session = await getServerSession();
	const openPenaltys = await prisma.penalty.findMany({
		where: {
			userId: session?.user.id,
			until: {
				gte: new Date(),
			},
			suspended: false,
			type: { in: ["TIME_BAN", "BAN"] },
		},
	});

	if (!session || !session.user.firstname) {
		redirect("/login");
	}

	if (openPenaltys[0]) {
		if (openPenaltys[0].type === "BAN") {
			return (
				<Error
					title="Du wurdest permanent ausgeschlossen"
					statusCode={403}
					description={`Dein Fehlverhalten war so schwerwiegend, dass du dauerhaft von VirtualAirRescue ausgeschlossen wurdest.`}
				/>
			);
		}
		return (
			<Error
				title="Du hast eine aktive Strafe"
				statusCode={403}
				description={`Du bist bis zum ${new Date(openPenaltys[0].until!).toLocaleString()} gesperrt.`}
			/>
		);
	}

	if (!session.user.emailVerified) {
		return <Error title="E-Mail-Adresse nicht verifiziert" statusCode={403} />;
	}

	if (!session.user.permissions.includes("PILOT"))
		return <Error title="Zugriff verweigert" statusCode={403} />;

	return (
		<>
			<Navbar />
			{children}
		</>
	);
}
