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 { PollForm } from '../poll-form' import { PollQuestionsManager } from './poll-questions' import { PollResultsView } from './poll-results' export default async function PollDetailPage({ params, }: { params: Promise<{ locale: string; id: string }> }) { const { id } = await params const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.POLLS_EDIT, session.user.rank)) { redirect('/admin/polls') } const pollId = parseInt(id, 10) if (Number.isNaN(pollId)) notFound() const poll = await prisma.websitePoll.findUnique({ where: { id: pollId }, include: { questions: { orderBy: { sortOrder: 'asc' }, include: { votes: true, }, }, }, }) if (!poll) notFound() const totalVoters = new Set(poll.questions.flatMap((q) => q.votes.map((v) => v.userId))).size return (

{poll.title}

{poll.status}
{poll.description &&

{poll.description}

}
{/* Stats */}
Total Voters
{totalVoters}
Questions
{poll.questions.length}
Total Votes
{poll.questions.reduce((sum, q) => sum + q.votes.length, 0)}
{/* Edit form */} {/* Questions */} ({ id: q.id, question: q.question, type: q.type, sortOrder: q.sortOrder, options: q.options, }))} /> {/* Results */} {poll.questions.length > 0 && ( ({ id: q.id, question: q.question, options: q.options, votes: q.votes.map((v) => v.answer), }))} /> )}
) }