"use client" // Aggregert statistikk på tvers av ALLE fullførte "Egne runder" (ADR-033), // lenket fra dashbordets "Statistikk"-seksjon (2026-07-28). Egen backend- // aggregering (GET /rounds/stats/summary) -- ikke bare klientside-utledning // av round-stats.tsx sin logikk, siden putt/18-hull-regelen (padding av // uspilte hull til 2 putter, KUN for dette tallet) må kjøre over ALLE // fullførte runder samlet, ikke én runde om gangen. import type React from "react" import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import Link from "next/link" import { ArrowLeft, BarChart3, Flag, Target, Waves, Wind } from "lucide-react" type ApiStatsSummary = { rounds_completed: number avg_score_to_par: number | null avg_putts_per_18: number | null putts_tracked_rounds: number fairway_hit_pct: number | null fairway_tracked_holes: number gir_pct: number | null gir_tracked_holes: number one_putt_pct: number | null scrambling_pct: number | null sand_save_pct: number | null avg_chip_per_round: number | null avg_bunker_per_round: number | null avg_penalty_per_round: number | null avg_anyway_per_round: number | null } function signed(n: number): string { const sign = n > 0 ? "+" : n < 0 ? "−" : "±" return `${sign}${Math.abs(n).toFixed(1).replace(".", ",")}` } function pct(n: number): string { return `${Math.round(n)} %` } function StatTile({ label, value, hint }: { label: string; value: string; hint?: string }) { return (
{label} {value} {hint && {hint}}
) } function Section({ title, icon: Icon, children, }: { title: string icon: typeof BarChart3 children: React.ReactNode }) { return (

{children}
) } export function RoundsStatsSummary() { const router = useRouter() const [data, setData] = useState(null) const [error, setError] = useState(null) useEffect(() => { let cancelled = false async function load() { try { const res = await fetch("/rounds/stats/summary", { credentials: "include" }) if (res.status === 401) { router.replace("/") return } if (!res.ok) throw new Error(`stats: ${res.status}`) const json: ApiStatsSummary = await res.json() if (!cancelled) setData(json) } catch { if (!cancelled) setError("Klarte ikke å hente statistikken. Prøv igjen om litt.") } } void load() return () => { cancelled = true } }, [router]) return (
{error && (

{error}

)} {data === null && !error ? (
) : data && data.rounds_completed === 0 ? (

Ingen fullførte runder ennå

Statistikken bygger seg opp automatisk etter hvert som du fullfører runder.

) : data ? ( <>

Aggregert over {data.rounds_completed} {data.rounds_completed === 1 ? "fullført runde" : "fullførte runder"}.

0 ? `${data.putts_tracked_rounds} ${data.putts_tracked_rounds === 1 ? "runde med" : "runder med"} puttsporing` : "Ingen runder med puttsporing ennå" } />
0 ? `${data.fairway_tracked_holes} hull registrert` : undefined} /> 0 ? `${data.gir_tracked_holes} hull registrert` : undefined} />
{data.avg_anyway_per_round !== null && (
)} ) : null}
) }