import NavigationWrapper from "@/components/NavigationWrapper";
import EventsPageSection from "@/components/EventsPageSection";
import { prisma } from "@/lib/prisma";
import { getBackgroundImage } from "@/lib/preferences";
import { auth } from "@/lib/auth";
import { calculateEventStatus } from "@/lib/eventStatus";

export default async function EventsPage() {
  const events = await prisma.event.findMany({
    orderBy: {
      date: "desc",
    },
  });

  // Sérialiser les dates pour le client
  const serializedEvents = events.map((event) => ({
    ...event,
    date: event.date.toISOString(),
    createdAt: event.createdAt.toISOString(),
    updatedAt: event.updatedAt.toISOString(),
  }));

  const backgroundImage = await getBackgroundImage("events", "/got-2.jpg");

  // Récupérer les inscriptions côté serveur pour éviter le clignotement
  const session = await auth();
  const initialRegistrations: Record<string, boolean> = {};

  if (session?.user?.id) {
    const upcomingEvents = events.filter(
      (e) => calculateEventStatus(e.date) === "UPCOMING"
    );
    const eventIds = upcomingEvents.map((e) => e.id);

    if (eventIds.length > 0) {
      const registrations = await prisma.eventRegistration.findMany({
        where: {
          userId: session.user.id,
          eventId: {
            in: eventIds,
          },
        },
        select: {
          eventId: true,
        },
      });

      registrations.forEach((reg) => {
        initialRegistrations[reg.eventId] = true;
      });
    }
  }

  return (
    <main className="min-h-screen bg-black relative">
      <NavigationWrapper />
      <EventsPageSection
        events={serializedEvents}
        backgroundImage={backgroundImage}
        initialRegistrations={initialRegistrations}
      />
    </main>
  );
}
