import { useMemo } from 'react'; interface Props { realtime?: { pv_power: number; heatpump_power: number; total_load: number; grid_power: number; }; } export default function EnergyFlow({ realtime }: Props) { const pv = realtime?.pv_power || 0; const load = realtime?.total_load || 0; const grid = realtime?.grid_power || 0; const hp = realtime?.heatpump_power || 0; // Calculate flows const pvToLoad = Math.min(pv, load); const pvToGrid = Math.max(0, pv - load); const gridToLoad = Math.max(0, grid); const gridExport = Math.max(0, -grid); const selfUseRate = load > 0 ? ((pvToLoad / load) * 100).toFixed(1) : '0.0'; // Determine which flows are active (> 0.1 kW threshold) const flows = useMemo(() => ({ pvToLoad: pvToLoad > 0.1, pvToGrid: pvToGrid > 0.1 || gridExport > 0.1, gridToLoad: gridToLoad > 0.1, gridToHp: hp > 0.1, }), [pvToLoad, pvToGrid, gridExport, gridToLoad, hp]); // SVG layout constants const W = 560; const H = 340; // Node positions (center points) const nodes = { pv: { x: W / 2, y: 40 }, load: { x: 100, y: 200 }, grid: { x: W - 100, y: 200 }, heatpump: { x: W / 2, y: 300 }, }; return (