"use client"; import { RiBankCard2Line } from "@remixicon/react"; import Image from "next/image"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import type { CartoesReportData } from "@/features/reports/cards-report-queries"; import MoneyValues from "@/shared/components/money-values"; import { Card, CardContent } from "@/shared/components/ui/card"; import { Progress } from "@/shared/components/ui/progress"; import { resolveCardBrandAsset } from "@/shared/lib/cards/brand-assets"; import { resolveLogoSrc } from "@/shared/lib/logo"; import { cn } from "@/shared/utils"; import { formatCurrency } from "@/shared/utils/currency"; import { formatPercentage } from "@/shared/utils/percentage"; type CardsOverviewProps = { data: CartoesReportData; }; export function CardsOverview({ data }: CardsOverviewProps) { const searchParams = useSearchParams(); const periodoParam = searchParams.get("periodo"); const getUsageColor = (percent: number) => { if (percent < 50) return "bg-success"; if (percent < 80) return "bg-warning"; return "bg-destructive"; }; const buildUrl = (cardId: string) => { const params = new URLSearchParams(); if (periodoParam) params.set("periodo", periodoParam); params.set("cartao", cardId); return `/reports/card-usage?${params.toString()}`; }; const summaryCards = [ { title: "Limite", value: data.totalLimit, isMoney: true }, { title: "Usado", value: data.totalUsage, isMoney: true }, { title: "Disponível", value: data.totalLimit - data.totalUsage, isMoney: true, }, { title: "Utilização", value: data.totalUsagePercent, isMoney: false }, ]; if (data.cards.length === 0) { return (

Nenhum cartão encontrado

); } return (
{/* Summary stats */}
{summaryCards.map((card) => (

{card.title}

{card.isMoney ? ( ) : (

{formatPercentage(card.value, { maximumFractionDigits: 0, minimumFractionDigits: 0, })}

)}
))}

Meus cartões

{/* Cards list */}
{data.cards.map((card) => { const logoPath = resolveLogoSrc(card.logo); const brandAsset = resolveCardBrandAsset(card.brand); const isSelected = data.selectedCard?.card.id === card.id; return (
{logoPath ? ( {card.name} ) : ( )}
{card.name} {brandAsset && ( {card.brand )}

{formatCurrency(card.currentUsage)} /{" "} {formatCurrency(card.limit)}

div]:${getUsageColor(card.usagePercent)}`, )} /> {formatPercentage(card.usagePercent, { maximumFractionDigits: 0, minimumFractionDigits: 0, })}
); })}
); }