// components/KPI_Table.tsx import React from 'react'; import { SiteDetails } from '@/types/SiteData'; // Adjust import path as necessary interface KPI_TableProps { siteData: SiteDetails | null; // Pass the selected site's data as a prop } const KPI_Table: React.FC = ({ siteData }) => { if (!siteData) { return (

Monthly KPI

Select a site to view KPIs.

No data available

); } // --- KPI Calculations --- const monthlyYield = siteData.generationData.reduce((sum, daily) => sum + daily, 0); const monthlyConsumption = siteData.consumptionData.reduce((sum, daily) => sum + daily, 0); // Calculate Grid Draw/Export let monthlyGridDraw = 0; let monthlySolarExport = 0; // A simplistic model for grid draw/export: // If generation > consumption, excess is exported. // If consumption > generation, deficit is drawn from grid. // Note: This is highly simplified. Real-world calculations involve time-of-use, battery storage, etc. const netEnergy = monthlyYield - monthlyConsumption; if (netEnergy > 0) { monthlySolarExport = netEnergy; } else { monthlyGridDraw = Math.abs(netEnergy); } const selfConsumption = Math.min(monthlyYield, monthlyConsumption); const savingsFromSelfConsumption = selfConsumption * siteData.gridImportPrice_RM_per_kWh; const revenueFromExport = monthlySolarExport * siteData.solarExportTariff_RM_per_kWh; const monthlySaved = savingsFromSelfConsumption + revenueFromExport; const efficiency = siteData.theoreticalMaxGeneration_kWh && siteData.theoreticalMaxGeneration_kWh > 0 ? (monthlyYield / siteData.theoreticalMaxGeneration_kWh) * 100 : 0; // Default to 0 or 'N/A' if theoretical max is not set or zero const data = [ { kpi: 'Monthly Yield', value: `${monthlyYield.toFixed(0)} kWh` }, { kpi: 'Monthly Consumption', value: `${monthlyConsumption.toFixed(0)} kWh` }, { kpi: 'Monthly Grid Draw', value: `${monthlyGridDraw.toFixed(0)} kWh` }, // { kpi: 'Monthly Solar Export', value: `${monthlySolarExport.toFixed(0)} kWh` }, // Can add this if desired { kpi: 'Efficiency', value: `${efficiency.toFixed(1)}%` }, { kpi: 'Monthly Saved', value: `RM ${monthlySaved.toFixed(2)}` }, ]; return (

Monthly KPI

{data.map((row) => ( ))}
KPI Value
{row.kpi} {row.value}
); }; export default KPI_Table;