import Link from 'next/link';
import {
ArrowRight,
FileText,
GraduationCap,
Mail,
Plus,
UserCheck,
UserPlus,
CalendarDays,
Activity,
BedDouble,
} from 'lucide-react';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { Badge } from '@kit/ui/badge';
import { Button } from '@kit/ui/button';
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from '@kit/ui/card';
import { createMemberManagementApi } from '@kit/member-management/api';
import { createCourseManagementApi } from '@kit/course-management/api';
import { createFinanceApi } from '@kit/finance/api';
import { createNewsletterApi } from '@kit/newsletter/api';
import { createBookingManagementApi } from '@kit/booking-management/api';
import { createEventManagementApi } from '@kit/event-management/api';
import { CmsPageShell } from '~/components/cms-page-shell';
import { StatsCard } from '~/components/stats-card';
interface TeamAccountHomePageProps {
params: Promise<{ account: string }>;
}
export default async function TeamAccountHomePage({
params,
}: TeamAccountHomePageProps) {
const { account } = await params;
const client = getSupabaseServerClient();
const { data: acct } = await client
.from('accounts')
.select('id, name')
.eq('slug', account)
.single();
if (!acct) return
Konto nicht gefunden
;
// Load all stats in parallel with allSettled for resilience
const [
memberStatsResult,
courseStatsResult,
invoicesResult,
newslettersResult,
bookingsResult,
eventsResult,
] = await Promise.allSettled([
createMemberManagementApi(client).getMemberStatistics(acct.id),
createCourseManagementApi(client).getStatistics(acct.id),
createFinanceApi(client).listInvoices(acct.id, { status: 'draft' }),
createNewsletterApi(client).listNewsletters(acct.id),
createBookingManagementApi(client).listBookings(acct.id, { page: 1 }),
createEventManagementApi(client).listEvents(acct.id, { page: 1 }),
]);
const memberStats =
memberStatsResult.status === 'fulfilled'
? memberStatsResult.value
: { total: 0, active: 0, inactive: 0, pending: 0, resigned: 0 };
const courseStats =
courseStatsResult.status === 'fulfilled'
? courseStatsResult.value
: { totalCourses: 0, openCourses: 0, completedCourses: 0, totalParticipants: 0 };
const openInvoices =
invoicesResult.status === 'fulfilled' ? invoicesResult.value : [];
const newsletters =
newslettersResult.status === 'fulfilled' ? newslettersResult.value : [];
const bookings =
bookingsResult.status === 'fulfilled'
? bookingsResult.value
: { data: [], total: 0 };
const events =
eventsResult.status === 'fulfilled'
? eventsResult.value
: { data: [], total: 0 };
const accountName = acct.name ? String(acct.name) : 'Dashboard';
return (
{/* Stats Row */}
}
description={`${memberStats.total} gesamt, ${memberStats.pending} ausstehend`}
/>
}
description={`${courseStats.totalCourses} gesamt, ${courseStats.totalParticipants} Teilnehmer`}
/>
}
description="Entwürfe zum Versenden"
/>
}
description="Erstellt"
/>
{/* Letzte Aktivität */}
Letzte Aktivität
Aktuelle Buchungen und Veranstaltungen
{/* Recent bookings */}
{bookings.data.slice(0, 3).map((booking: Record
) => (
Buchung #{String(booking.id).slice(0, 8)}
{booking.check_in
? new Date(
String(booking.check_in),
).toLocaleDateString('de-DE')
: '—'}{' '}
–{' '}
{booking.check_out
? new Date(
String(booking.check_out),
).toLocaleDateString('de-DE')
: '—'}
{String(booking.status ?? '—')}
))}
{/* Recent events */}
{events.data.slice(0, 3).map((event: Record) => (
{String(event.name)}
{event.event_date
? new Date(
String(event.event_date),
).toLocaleDateString('de-DE')
: 'Kein Datum'}
{String(event.status ?? '—')}
))}
{bookings.data.length === 0 && events.data.length === 0 && (
Noch keine Aktivitäten vorhanden
)}
{/* Schnellaktionen */}
Schnellaktionen
Häufig verwendete Aktionen
{/* Module Overview Row */}
Buchungen
{bookings.total}
{bookings.data.filter(
(b: Record) =>
b.status === 'confirmed' || b.status === 'checked_in',
).length}{' '}
aktiv
Veranstaltungen
{events.total}
{events.data.filter(
(e: Record) =>
e.status === 'published' ||
e.status === 'registration_open',
).length}{' '}
aktiv
Kurse abgeschlossen
{courseStats.completedCourses}
von {courseStats.totalCourses} insgesamt
);
}