import React from 'react'; import { formatCurrency, formatPercent, calculateProductMetrics } from './utils'; import { Product } from './types'; import { DollarSign, TrendingUp, AlertTriangle, Activity } from 'lucide-react'; interface KPICardsProps { products: Product[]; includeCOGS: boolean; } export const KPICards: React.FC = ({ products, includeCOGS }) => { const totals = products.reduce( (acc, product) => { const metrics = calculateProductMetrics(product, includeCOGS); acc.grossSales += product.grossSales; acc.netMargin += metrics.netMargin; acc.ppcSpend += product.ppcSpend; acc.chargebacks += product.chargebacks; return acc; }, { grossSales: 0, netMargin: 0, ppcSpend: 0, chargebacks: 0 } ); const marginPercent = totals.grossSales > 0 ? totals.netMargin / totals.grossSales : 0; const tacos = totals.grossSales > 0 ? totals.ppcSpend / totals.grossSales : 0; const cards = [ { title: 'Total Sales', value: formatCurrency(totals.grossSales), icon: , description: 'Gross revenue for the period', }, { title: 'Est. Net Margin', value: formatPercent(marginPercent), subValue: formatCurrency(totals.netMargin), icon: , description: includeCOGS ? 'After COGS and expenses' : 'Before COGS', }, { title: 'TACOS', value: formatPercent(tacos), icon: , description: 'Total advertising cost / Sales', }, { title: 'Total Chargebacks', value: formatCurrency(totals.chargebacks), icon: , description: 'Logistics issues / returns', }, ]; return (
{cards.map((card, idx) => (

{card.title}

{card.icon}
{card.value} {card.subValue && ( ({card.subValue}) )}

{card.description}

))}
); };