'use client' import { Area, AreaChart, CartesianGrid, XAxis, YAxis, Pie, PieChart, Label, } from 'recharts' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, type ChartConfig, } from '@/components/ui/chart' import type { DailyUsage, OverviewStats } from '@/lib/parse-logs' import { formatTokens } from '@/lib/format' import { useMemo } from 'react' const pieConfig = { input: { label: 'Input', color: 'var(--chart-1)' }, output: { label: 'Output', color: 'var(--chart-7)' }, cacheWrite: { label: 'Cache Write', color: 'var(--chart-4)' }, cacheRead: { label: 'Cache Read', color: 'var(--chart-8)' }, } satisfies ChartConfig const areaConfig = { input: { label: 'Input', color: 'var(--chart-1)' }, output: { label: 'Output', color: 'var(--chart-7)' }, cacheWrite: { label: 'Cache Write', color: 'var(--chart-4)' }, cacheRead: { label: 'Cache Read', color: 'var(--chart-8)' }, } satisfies ChartConfig export function TokenBreakdown({ daily, overview, }: { daily: DailyUsage[] overview: OverviewStats }) { const pieData = useMemo(() => [ { name: 'input', value: overview.totalInputTokens, fill: 'var(--color-input)' }, { name: 'output', value: overview.totalOutputTokens, fill: 'var(--color-output)' }, { name: 'cacheWrite', value: overview.totalCacheCreationTokens, fill: 'var(--color-cacheWrite)' }, { name: 'cacheRead', value: overview.totalCacheReadTokens, fill: 'var(--color-cacheRead)' }, ].filter((d) => d.value > 0), [overview]) const totalTokens = useMemo( () => pieData.reduce((sum, d) => sum + d.value, 0), [pieData] ) const areaData = daily.map((d) => ({ date: d.date.slice(5), input: d.inputTokens, output: d.outputTokens, cacheWrite: d.cacheCreationTokens, cacheRead: d.cacheReadTokens, })) return (