import { getTranslations } from 'next-intl/server'; import { FischereiTabNavigation } from '@kit/fischerei/components'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { AccountNotFound } from '~/components/account-not-found'; import { CmsPageShell } from '~/components/cms-page-shell'; interface Props { params: Promise<{ account: string }>; } export default async function StatisticsPage({ params }: Props) { const { account } = await params; const client = getSupabaseServerClient(); const t = await getTranslations('fischerei'); const { data: acct } = await client .from('accounts') .select('id') .eq('slug', account) .single(); if (!acct) return ; // Fetch actual statistics from existing tables const [watersResult, speciesResult, stockingResult, catchBooksResult, leasesResult, permitsResult] = await Promise.allSettled([ client.from('waters').select('id', { count: 'exact' }).eq('account_id', acct.id), client.from('fish_species').select('id', { count: 'exact' }).eq('account_id', acct.id), client.from('fish_stocking').select('id, quantity, cost_total', { count: 'exact' }).eq('account_id', acct.id), client.from('catch_books').select('id, status', { count: 'exact' }).eq('account_id', acct.id), client.from('fishing_leases').select('id', { count: 'exact' }).eq('account_id', acct.id).eq('status', 'active'), client.from('fishing_permits').select('id', { count: 'exact' }).eq('account_id', acct.id), ]); const waterCount = watersResult.status === 'fulfilled' ? (watersResult.value.count ?? 0) : 0; const speciesCount = speciesResult.status === 'fulfilled' ? (speciesResult.value.count ?? 0) : 0; const stockingData = stockingResult.status === 'fulfilled' ? (stockingResult.value.data ?? []) : []; const stockingCount = stockingData.length; const stockingCost = stockingData.reduce((sum: number, s: any) => sum + (Number(s.cost_total) || 0), 0); const catchBookCount = catchBooksResult.status === 'fulfilled' ? (catchBooksResult.value.count ?? 0) : 0; const catchBookData = catchBooksResult.status === 'fulfilled' ? (catchBooksResult.value.data ?? []) : []; const pendingCatchBooks = catchBookData.filter((cb: any) => cb.status === 'submitted').length; const leaseCount = leasesResult.status === 'fulfilled' ? (leasesResult.value.count ?? 0) : 0; const permitCount = permitsResult.status === 'fulfilled' ? (permitsResult.value.count ?? 0) : 0; const formatCurrency = (v: number) => new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(v); return (

Fangstatistiken und Auswertungen

Gewässer

{waterCount}

Fischarten

{speciesCount}

Besatzaktionen

{stockingCount}

{formatCurrency(stockingCost)} Gesamtkosten

Fangbücher

{catchBookCount}

{pendingCatchBooks > 0 &&

{pendingCatchBooks} zur Prüfung

}

Aktive Pachten

{leaseCount}

Erlaubnisscheine

{permitCount}

{waterCount === 0 && speciesCount === 0 && (

Noch keine Daten vorhanden

Sobald Gewässer, Fischarten und Fangbücher angelegt werden, erscheinen hier detaillierte Statistiken.

)}
); }