"use client"; import { RiInformationLine } from "@remixicon/react"; import Image from "next/image"; import type { ReactNode } from "react"; import MoneyValues from "@/components/shared/money-values"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { resolveLogoSrc } from "@/lib/logo"; import { formatCurrency } from "@/lib/utils/currency"; import { cn } from "@/lib/utils/ui"; type DetailValue = string | number | ReactNode; type AccountStatementCardProps = { accountName: string; accountType: string; status: string; periodLabel: string; currentBalance: number; openingBalance: number; totalIncomes: number; totalExpenses: number; logo?: string | null; actions?: React.ReactNode; }; const getAccountStatusBadgeVariant = ( status: string, ): "success" | "outline" => { const normalizedStatus = status.toLowerCase(); if (normalizedStatus === "ativa") { return "success"; } return "outline"; }; export function AccountStatementCard({ accountName, accountType, status, periodLabel, currentBalance, openingBalance, totalIncomes, totalExpenses, logo, actions, }: AccountStatementCardProps) { const logoPath = resolveLogoSrc(logo); return (
{logoPath ? (
{`Logo
) : null}
{accountName}

Extrato de {periodLabel}

{actions ?
{actions}
: null}
{/* Composição do Saldo */}
} tooltip="Saldo inicial cadastrado na conta somado aos lançamentos pagos anteriores a este mês." />
{formatCurrency(totalIncomes)} } tooltip="Total de receitas deste mês classificadas como pagas para esta conta." /> {formatCurrency(totalExpenses)} } tooltip="Total de despesas pagas neste mês (considerando divisão entre pagadores)." /> = 0 ? "text-success" : "text-destructive", )} /> } tooltip="Diferença entre entradas e saídas do mês; positivo indica saldo crescente." />
{/* Saldo Atual - Destaque Principal */} } tooltip="Saldo inicial do período + entradas - saídas realizadas neste mês." />
{/* Informações da Conta */}
{status}
} tooltip="Indica se a conta está ativa para lançamentos ou foi desativada." />
); } function DetailItem({ label, value, className, tooltip, }: { label: string; value: DetailValue; className?: string; tooltip?: string; }) { return (
{label} {tooltip ? ( {tooltip} ) : null}
{value}
); }