"use client"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { TrendingUp, TrendingDown, Wallet, CreditCard } from "lucide-react"; import type { BankingData } from "@/lib/types"; interface OverviewCardsProps { data: BankingData; } export function OverviewCards({ data }: OverviewCardsProps) { const totalBalance = data.accounts.reduce((sum, acc) => sum + acc.balance, 0); const thisMonth = new Date(); thisMonth.setDate(1); const thisMonthStr = thisMonth.toISOString().slice(0, 7); const monthTransactions = data.transactions.filter((t) => t.date.startsWith(thisMonthStr), ); const income = monthTransactions .filter((t) => t.amount > 0) .reduce((sum, t) => sum + t.amount, 0); const expenses = monthTransactions .filter((t) => t.amount < 0) .reduce((sum, t) => sum + Math.abs(t.amount), 0); const reconciled = data.transactions.filter((t) => t.isReconciled).length; const total = data.transactions.length; const reconciledPercent = total > 0 ? Math.round((reconciled / total) * 100) : 0; const formatCurrency = (amount: number) => { return new Intl.NumberFormat("fr-FR", { style: "currency", currency: "EUR", }).format(amount); }; return (
{data.accounts.length} compte{data.accounts.length > 1 ? "s" : ""}
{monthTransactions.filter((t) => t.amount > 0).length} opération {monthTransactions.filter((t) => t.amount > 0).length > 1 ? "s" : ""}
{monthTransactions.filter((t) => t.amount < 0).length} opération {monthTransactions.filter((t) => t.amount < 0).length > 1 ? "s" : ""}
{reconciled} / {total} opérations pointées