"use client"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ChartContainer, ChartTooltip, type ChartConfig, } from "@/components/ui/chart"; import type { CardDetailData } from "@/lib/relatorios/cartoes-report"; import { Bar, BarChart, CartesianGrid, XAxis, YAxis, ReferenceLine } from "recharts"; type CardUsageChartProps = { data: CardDetailData["monthlyUsage"]; limit: number; }; const chartConfig = { amount: { label: "Uso", color: "#3b82f6", }, } satisfies ChartConfig; export function CardUsageChart({ data, limit }: CardUsageChartProps) { const formatCurrency = (value: number) => { return new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL", minimumFractionDigits: 0, maximumFractionDigits: 0, }).format(value); }; const formatCurrencyCompact = (value: number) => { if (Math.abs(value) >= 1000) { return new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL", minimumFractionDigits: 0, maximumFractionDigits: 0, notation: "compact", }).format(value); } return formatCurrency(value); }; const chartData = data.map((item) => ({ month: item.periodLabel, amount: item.amount, })); return ( Uso Mensal (6 meses) {limit > 0 && ( )} { if (!active || !payload || payload.length === 0) { return null; } const data = payload[0].payload; const value = data.amount as number; const usagePercent = limit > 0 ? (value / limit) * 100 : 0; return (
{data.month}
Uso {formatCurrency(value)}
{limit > 0 && (
% do Limite {usagePercent.toFixed(0)}%
)}
); }} cursor={{ fill: "hsl(var(--muted))", opacity: 0.3 }} />
); }