import React from 'react'; import { Card, CardContent, Typography, Box, Grid, Chip, } from '@mui/material'; import { motion } from 'framer-motion'; import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip, Legend } from 'recharts'; import { DollarSign, TrendingUp, BarChart3, PieChart as PieChartIcon } from 'lucide-react'; // Types import { ProviderBreakdown } from '../../types/billing'; // Utils import { formatCurrency, formatNumber, getProviderIcon, getProviderColor } from '../../services/billingService'; interface CostBreakdownProps { providerBreakdown: ProviderBreakdown; totalCost: number; } const CostBreakdown: React.FC = ({ providerBreakdown, totalCost }) => { // Transform data for pie chart const chartData = Object.entries(providerBreakdown) .filter(([_, data]) => data.cost > 0) .map(([provider, data]) => ({ name: provider.charAt(0).toUpperCase() + provider.slice(1), value: data.cost, calls: data.calls, tokens: data.tokens, color: getProviderColor(provider), icon: getProviderIcon(provider) })) .sort((a, b) => b.value - a.value); // Custom tooltip for pie chart const CustomTooltip = ({ active, payload }: any) => { if (active && payload && payload.length) { const data = payload[0].payload; return ( {data.icon} {data.name} Cost: {formatCurrency(data.value)} Calls: {formatNumber(data.calls)} Tokens: {formatNumber(data.tokens)} ); } return null; }; // Custom label for pie chart const renderLabel = (entry: any) => { const percent = ((entry.value / totalCost) * 100).toFixed(1); return `${entry.name}: ${percent}%`; }; return ( {/* Header */} Cost Breakdown by Provider {/* Pie Chart */} {chartData.map((entry, index) => ( ))} } /> {/* Provider Details */} Provider Details {chartData.map((provider, index) => { const percentage = ((provider.value / totalCost) * 100).toFixed(1); return ( {/* Provider Header */} {provider.icon} {provider.name} {/* Metrics */} Cost: {formatCurrency(provider.value)} Calls: {formatNumber(provider.calls)} Tokens: {formatNumber(provider.tokens)} {/* Progress bar */} ); })} {/* Summary Stats */} Total Monthly Cost {formatCurrency(totalCost)} Across {chartData.length} active providers {/* Decorative Elements */} ); }; export default CostBreakdown;