import Link from "next/link";
import type { Metadata } from "next";
import { requireUser } from "@/lib/auth";
import { getSettings } from "@/lib/settings";
import {
getActiveYears,
getGenreDistribution,
getMonthlyActivity,
getMostWatched,
getProviderDistribution,
getTopRated,
getTotals,
getYearReview,
} from "@/lib/stats";
import { formatMinutes } from "@/lib/labels";
import { AppShell } from "@/components/AppShell";
import { Poster } from "@/components/Poster";
import { DistributionBars, MonthlyChart } from "@/components/stats/Charts";
export const metadata: Metadata = { title: "Statistik" };
export default async function StatsPage({
searchParams,
}: {
searchParams: Promise<{ jahr?: string }>;
}) {
const user = await requireUser("/statistik");
const settings = await getSettings();
const params = await searchParams;
const years = await getActiveYears(user.id);
const requested = Number.parseInt(params.jahr ?? "", 10);
const year = years.includes(requested) ? requested : (years[0] ?? new Date().getFullYear());
const [totals, monthly, providers, genres, topRated, mostWatched, review] = await Promise.all([
getTotals(user.id),
getMonthlyActivity(user.id, 12),
getProviderDistribution(user.id),
getGenreDistribution(user.id),
getTopRated(user.id, 5),
getMostWatched(user.id, 5),
getYearReview(user.id, year),
]);
if (totals.minutes === 0 && totals.episodes === 0 && totals.movies === 0) {
return (
Noch keine Sichtungen. Sobald du die erste Episode abhakst, entstehen hier
Schauzeit, Verteilungen und der Jahresrückblick.
Alles gerechnet aus deinen Sichtungen — Rewatches zählen mit.
Gesamte Schauzeit
{Math.round(totals.minutes / 60).toLocaleString("de-DE")} h
{formatMinutes(totals.minutes)} · das sind {days.toFixed(1).replace(".", ",")} Tage am Stück
Abgehakte Episoden und Filme je Monat.
Wo du tatsächlich geschaut hast — aus dem Feld „wo schaue ich das".
Titel mit mehreren Genres zählen in jedem mit.
Stärkster Monat:
{review.busiestMonth.label}
{" "}
mit {formatMinutes(review.busiestMonth.minutes)}
Die meiste Zeit ging an:
{review.topTitle.title}
({formatMinutes(review.topTitle.minutes)})
Statistik
Statistik
Die letzten zwölf Monate
Nach Streamingdienst
Nach Genre
{review.year} in Zahlen
{years.length > 1 && (
{emptyText}
) : (