"use client"; import { Bar, BarChart, Cell, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts"; import type { SynopStation } from "@/types/imgw"; import { ChartTooltip } from "@/components/charts/chart-tooltip"; import { Card } from "@/components/ui/card"; import { useI18n } from "@/lib/i18n"; import { useWeatherStore } from "@/lib/store"; import { convertPrecipitation, convertWindSpeed, convertWindSpeedToBeaufort, getPrecipitationUnitLabel, getWindSpeedUnitLabel, } from "@/lib/weather-utils"; const INITIAL_CHART_DIMENSION = { width: 1, height: 1 }; const SNAPSHOT_COLORS = ["hsl(var(--chart-temperature))", "hsl(var(--chart-feels-like))", "hsl(var(--chart-rainfall))"]; export function SnapshotChart({ station }: { station: SynopStation }) { const { t } = useI18n(); const windSpeedUnit = useWeatherStore((state) => state.windSpeedUnit); const precipitationUnit = useWeatherStore((state) => state.precipitationUnit); const windDigits = windSpeedUnit === "ms" ? 1 : 0; const windSpeed = station.windSpeed === null ? null : windSpeedUnit === "bft" ? convertWindSpeedToBeaufort(station.windSpeed) : Number(convertWindSpeed(station.windSpeed, windSpeedUnit).toFixed(windDigits)); const windMax = windSpeedUnit === "ms" ? 20 : windSpeedUnit === "kmh" ? 72 : windSpeedUnit === "bft" ? 12 : 45; const rainfall = station.rainfall === null ? null : Number(convertPrecipitation(station.rainfall, precipitationUnit).toFixed(2)); const rows = [ { name: t("weather.humidity"), value: station.humidity, unit: "%", max: 100, color: SNAPSHOT_COLORS[0] }, { name: t("weather.wind"), value: windSpeed, unit: getWindSpeedUnitLabel(windSpeedUnit), max: windMax, color: SNAPSHOT_COLORS[1], }, { name: t("weather.rainfall"), value: rainfall, unit: getPrecipitationUnitLabel(precipitationUnit), max: convertPrecipitation(30, precipitationUnit), color: SNAPSHOT_COLORS[2], }, ] .filter((row) => row.value !== null) .map((row) => ({ ...row, normalized: Math.min(100, ((row.value ?? 0) / row.max) * 100) })); return (

{t("snapshot.label")}

{t("snapshot.title")}

{t("snapshot.description")}

{ const row = entry.payload; return `${row?.value ?? "—"} ${row?.unit ?? ""}`.trim(); }} /> } /> {rows.map((row) => ( ))}
); }