// ----------------------------------------------------------------------------- // Auto-Ka — Agrégateur de voitures usagées à vendre (province de Québec) // Auteur : Simon-Pierre Boucher — contact@spboucher.ai // Stats.tsx : tableau de bord du marché — héros, distributions, classements, // parts de marché, aubaines + rapport PDF téléchargeable. // ----------------------------------------------------------------------------- import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { fmtPrice } from "../api"; import { Datum, Donut, HBars, VBars } from "../components/Charts"; interface Detailed { total: number; sources: number; regions: number; avg_price: number | null; median_price: number | null; avg_km: number | null; median_km: number | null; avg_year: number | null; new_7d: number; electrified_pct: number; price_hist: Datum[]; km_hist: Datum[]; year_hist: Datum[]; by_make: { label: string; n: number; avg_price: number | null }[]; by_region: { label: string; n: number; avg_price: number | null }[]; by_body: Datum[]; by_fuel: Datum[]; top_models: { label: string; n: number; avg_price: number | null; avg_km: number | null }[]; top_dealers: { label: string; n: number; avg_price: number | null }[]; price_drops: { uid: string; title: string; year: number | null; price: number; prev_price: number; dealer_name: string; city: string; }[]; } const fmtK = (n: number | null) => n == null ? "—" : `${Math.round(n / 1000)}k km`; export default function StatsPage() { const [s, setS] = useState(null); useEffect(() => { fetch("/api/stats/detailed") .then((r) => r.json()) .then(setS) .catch(() => {}); }, []); if (!s) return (
); const withPrice = (rows: { label: string; n: number; avg_price: number | null }[]): Datum[] => rows.map((r) => ({ label: r.label, n: r.n, extra: r.avg_price ? `moy. ${fmtPrice(r.avg_price)}` : undefined, })); return (
Marché

Le marché de l'occasion, en direct

Calculé en temps réel sur l'inventaire actif de {s.sources} concessionnaires dans {s.regions} régions du Québec.

⬇ Télécharger le rapport PDF
{s.total.toLocaleString("fr-CA")} véhicules en vente
{fmtPrice(s.avg_price)} prix moyen
{fmtPrice(s.median_price)} prix médian
{fmtK(s.avg_km)} km moyen
{s.new_7d.toLocaleString("fr-CA")} arrivages · 7 jours
{s.electrified_pct} % électrifiés (VÉ + hybrides)

💰 Distribution des prix

🛣 Kilométrage (milliers de km)

📅 Années-modèles

🏷 Top marques

📍 Par région

🚙 Carrosseries

⛽ Carburants

🚗 Modèles les plus offerts

({ label: m.label, n: m.n, extra: `moy. ${fmtPrice(m.avg_price)} · ${fmtK(m.avg_km)}`, }))} color="#1c7a4d" />
{s.price_drops.length > 0 && (

📉 Baisses de prix récentes

{s.price_drops.map((d) => (

{d.title}

{d.dealer_name} · {d.city}
{fmtPrice(d.price)}{" "} {fmtPrice(d.prev_price)}
−{fmtPrice(d.prev_price - d.price)}
))}
)}

🏢 Plus grands inventaires

); }