import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { RideCoasterStat } from "@/types/database"; import { TrendingUp } from "lucide-react"; import { useUnitPreferences } from "@/hooks/useUnitPreferences"; import { convertValueFromMetric, detectUnitType, getMetricUnit, getDisplayUnit } from "@/lib/units"; interface CoasterStatisticsProps { statistics?: RideCoasterStat[]; } export const CoasterStatistics = ({ statistics }: CoasterStatisticsProps) => { const { preferences } = useUnitPreferences(); if (!statistics || statistics.length === 0) { return null; } const getDisplayValue = (stat: RideCoasterStat) => { if (!stat.unit) { return stat.stat_value.toLocaleString(); } const unitType = detectUnitType(stat.unit); if (unitType === 'unknown') { return `${stat.stat_value.toLocaleString()} ${stat.unit}`; } // stat.unit is the metric unit stored in DB (e.g., "km/h") // Get the target display unit based on user preference (e.g., "mph" for imperial) const displayUnit = getDisplayUnit(stat.unit, preferences.measurement_system); // Convert from metric (stat.unit) to display unit const convertedValue = convertValueFromMetric( stat.stat_value, displayUnit, // Target unit (mph, ft, in) stat.unit // Source metric unit (km/h, m, cm) ); return `${convertedValue.toLocaleString()} ${displayUnit}`; }; // Group stats by category const groupedStats = statistics.reduce((acc, stat) => { const category = stat.category || 'General'; if (!acc[category]) { acc[category] = []; } acc[category].push(stat); return acc; }, {} as Record); return ( Coaster Statistics
{Object.entries(groupedStats).map(([category, stats]) => (

{category}

{stats .sort((a, b) => a.display_order - b.display_order) .map((stat) => (
{stat.stat_name} {stat.description && ( {stat.description} )}
{getDisplayValue(stat)}
))}
))}
); };