"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"; import { getAccountBalance } from "@/lib/account-utils"; import { cn } from "@/lib/utils"; interface OverviewCardsProps { data: BankingData; } export function OverviewCards({ data }: OverviewCardsProps) { const totalBalance = data.accounts.reduce( (sum, acc) => sum + getAccountBalance(acc), 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 (
Solde Total
= 0 ? "text-emerald-600" : "text-red-600", )} > {formatCurrency(totalBalance)}

{data.accounts.length} compte{data.accounts.length > 1 ? "s" : ""}

Revenus du mois
{formatCurrency(income)}

{monthTransactions.filter((t) => t.amount > 0).length} opération {monthTransactions.filter((t) => t.amount > 0).length > 1 ? "s" : ""}

Dépenses du mois
{formatCurrency(expenses)}

{monthTransactions.filter((t) => t.amount < 0).length} opération {monthTransactions.filter((t) => t.amount < 0).length > 1 ? "s" : ""}

Pointage
{reconciledPercent}%

{reconciled} / {total} opérations pointées

); }