import { useMemo } from "react"; import { LineChart, Line, BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from "recharts"; import { Card } from "@/components/ui/card"; import { TrendingUp, TrendingDown } from "lucide-react"; interface UsageChartProps { data: Record; // { "2026-01-07": 120, "2026-01-06": 95, ... } title: string; chartType?: "line" | "bar"; } export function UsageChart({ data, title, chartType = "line" }: UsageChartProps) { // Transform data for recharts const chartData = useMemo(() => { return Object.entries(data) .map(([date, count]) => ({ date: new Date(date).toLocaleDateString("en-US", { month: "short", day: "numeric", }), requests: count, })) .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()); }, [data]); // Calculate trend const trend = useMemo(() => { if (chartData.length < 2) return null; const recent = chartData.slice(-7).reduce((sum, d) => sum + d.requests, 0); const previous = chartData .slice(-14, -7) .reduce((sum, d) => sum + d.requests, 0); if (previous === 0) return null; const change = ((recent - previous) / previous) * 100; return { change, isPositive: change > 0 }; }, [chartData]); if (chartData.length === 0) { return (

{title}

No usage data available
); } return (

{title}

{trend && (
{trend.isPositive ? ( ) : ( )} {Math.abs(trend.change).toFixed(1)}%
)}
{chartType === "line" ? ( ) : ( )}
); }