import { CalendarDays, Gift, Trophy, Users } from 'lucide-react' import { notFound, redirect } from 'next/navigation' import { AdminBreadcrumb } from '@/components/admin/admin-breadcrumb' import { Badge } from '@/components/ui/badge' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' import { prisma } from '@/lib/prisma' import { EventForm } from '../event-form' import { EventPrizesManager } from './event-prizes' import { EventRegistrations } from './event-registrations' import { EventWinnersManager } from './event-winners' export default async function EventDetailPage({ params, }: { params: Promise<{ locale: string; id: string }> }) { const { id } = await params const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.EVENTS_EDIT, session.user.rank)) { redirect('/admin/events') } const eventId = parseInt(id, 10) if (Number.isNaN(eventId)) notFound() const event = await prisma.websiteEvent.findUnique({ where: { id: eventId }, include: { type: true, prizes: { orderBy: { position: 'asc' } }, winners: { orderBy: { position: 'asc' } }, registrations: { orderBy: { createdAt: 'desc' } }, }, }) if (!event) notFound() const eventTypes = await prisma.websiteEventType.findMany({ where: { isActive: 1 }, orderBy: { name: 'asc' }, }) // Fetch usernames for registrations and winners const userIds = [ ...event.registrations.map((r) => r.userId), ...event.winners.map((w) => w.userId), ] const users = userIds.length > 0 ? await prisma.user.findMany({ where: { id: { in: [...new Set(userIds)] } }, select: { id: true, username: true }, }) : [] const userMap = new Map(users.map((u) => [u.id, u.username])) return (
{event.type.name} · {new Date(event.startsAt).toLocaleString()}
Max: {event.maxPlayers}
)}Ends: {new Date(event.endsAt).toLocaleString()}
)}