import Link from 'next/link'; import { GraduationCap, Users, Calendar, Euro, User, Clock, Pencil, } from 'lucide-react'; import { createCourseManagementApi } from '@kit/course-management/api'; import { formatDate } from '@kit/shared/dates'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Badge } from '@kit/ui/badge'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { AccountNotFound } from '~/components/account-not-found'; import { CmsPageShell } from '~/components/cms-page-shell'; import { DeleteCourseButton } from './delete-course-button'; interface PageProps { params: Promise<{ account: string; courseId: string }>; } const STATUS_LABEL: Record = { planned: 'Geplant', open: 'Offen', running: 'Laufend', completed: 'Abgeschlossen', cancelled: 'Abgesagt', }; const STATUS_VARIANT: Record< string, 'secondary' | 'default' | 'info' | 'outline' | 'destructive' > = { planned: 'secondary', open: 'default', running: 'info', completed: 'outline', cancelled: 'destructive', }; export default async function CourseDetailPage({ params }: PageProps) { const { account, courseId } = await params; const client = getSupabaseServerClient(); const api = createCourseManagementApi(client); const [course, participants, sessions] = await Promise.all([ api.getCourse(courseId), api.getParticipants(courseId), api.getSessions(courseId), ]); if (!course) return ; const courseData = course as Record; return (
{/* Action Buttons */}
{/* Summary Cards */}

Name

{String(courseData.name)}

Status

{STATUS_LABEL[String(courseData.status)] ?? String(courseData.status)}

Dozent

{String(courseData.instructor_id ?? '—')}

Beginn – Ende

{formatDate(courseData.start_date as string)} {' – '} {formatDate(courseData.end_date as string)}

Gebühr

{courseData.fee != null ? `${Number(courseData.fee).toFixed(2)} €` : '—'}

Teilnehmer

{participants.length} / {String(courseData.capacity ?? '∞')}

{/* Teilnehmer Section */} Teilnehmer
{participants.length === 0 ? ( ) : ( participants.map((p: Record) => ( )) )}
Name E-Mail Status Datum
Keine Teilnehmer
{String(p.last_name ?? '')},{' '} {String(p.first_name ?? '')} {String(p.email ?? '—')} {String(p.status ?? '—')} {formatDate(p.enrolled_at as string)}
{/* Termine Section */} Termine
{sessions.length === 0 ? ( ) : ( sessions.map((s: Record) => ( )) )}
Datum Beginn Ende Abgesagt?
Keine Termine
{formatDate(s.session_date as string)} {String(s.start_time ?? '—')} {String(s.end_time ?? '—')} {s.cancelled ? ( Ja ) : ( '—' )}
); }