import { getPublicUser, prisma } from "@repo/db";
import { TriangleAlert } from "lucide-react";
import { PenaltyCountdown } from "../(app)/_components/PenaltyCountdown";
import { getServerSession } from "api/auth/[...nextauth]/auth";

export const Penalty = async () => {
	const session = await getServerSession();
	const openTimeban = await prisma.penalty.findMany({
		where: {
			userId: session?.user.id,
			until: {
				gte: new Date(),
			},
			suspended: false,
			type: { in: ["TIME_BAN"] },
		},
		include: {
			CreatedUser: true,
		},
	});

	const openBans = await prisma.penalty.findMany({
		where: {
			userId: session?.user.id,
			suspended: false,
			type: { in: ["BAN"] },
		},
		include: {
			CreatedUser: true,
		},
	});

	return (
		<div className="card bg-error shadow-xl mb-4 col-span-6 xl:col-span-3">
			{openTimeban[0] && openTimeban[0].type === "TIME_BAN" && (
				<div className="card-body text-base-300">
					<h2 className="card-title text-3xl">
						<TriangleAlert />
						Aktive Strafe - <PenaltyCountdown until={openTimeban[0].until ?? new Date()} />{" "}
						verbleibend
					</h2>
					<p className="text-left font-bold">
						Du hast eine aktive Strafe und kannst dich deshalb nicht mit dem Netzwerk verbinden.
					</p>
					<p className="text-left">
						<span className="font-bold">Grund:</span> {openTimeban[0].reason}
					</p>
					{openTimeban[0].CreatedUser && (
						<p className="text-left">
							<span className="font-bold">Admin:</span>{" "}
							{getPublicUser(openTimeban[0].CreatedUser).fullName}
						</p>
					)}
				</div>
			)}
			{session?.user.isBanned && (
				<div className="card-body text-base-300">
					<h2 className="card-title text-3xl">
						<TriangleAlert />
						Du wurdest permanent von Virtual Air Rescue ausgeschlossen.
					</h2>
					<p className="text-left font-bold">
						Dein Fehlverhalten war so schwerwiegend, dass du dauerhaft von VirtualAirRescue
						ausgeschlossen wurdest. Du kannst dich nicht mehr mit dem Netzwerk verbinden.
					</p>
					{openBans[0] && (
						<>
							<p className="text-left font-bold">
								Grund: {openBans[0].reason || "Keine Begründung gefunden"}
							</p>
							{openBans[0].CreatedUser && (
								<p className="text-left">
									<span className="font-bold">Admin:</span>{" "}
									{getPublicUser(openBans[0].CreatedUser).fullName}
								</p>
							)}
						</>
					)}
				</div>
			)}
		</div>
	);
};
