"use client"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, } from "@/components/ui/card"; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogTitle, } from "@/components/ui/dialog"; import { Separator } from "@/components/ui/separator"; import { getPaymentMethodIcon } from "@/lib/utils/icons"; import { parseLocalDateString } from "@/lib/utils/date"; import { currencyFormatter, formatCondition, formatDate, formatPeriod, getTransactionBadgeVariant, } from "@/lib/lancamentos/formatting-helpers"; import { InstallmentTimeline } from "../shared/installment-timeline"; import type { LancamentoItem } from "../types"; interface LancamentoDetailsDialogProps { open: boolean; onOpenChange: (open: boolean) => void; lancamento: LancamentoItem | null; } export function LancamentoDetailsDialog({ open, onOpenChange, lancamento, }: LancamentoDetailsDialogProps) { if (!lancamento) return null; const isInstallment = lancamento.condition?.toLowerCase() === "parcelado" && lancamento.currentInstallment && lancamento.installmentCount; const valorParcela = Math.abs(lancamento.amount); const totalParcelas = lancamento.installmentCount ?? 1; const parcelaAtual = lancamento.currentInstallment ?? 1; const valorTotal = isInstallment ? valorParcela * totalParcelas : valorParcela; const valorRestante = isInstallment ? valorParcela * (totalParcelas - parcelaAtual) : 0; return (
#{lancamento.id} {formatDate(lancamento.purchaseDate)}
  • Forma de Pagamento {getPaymentMethodIcon(lancamento.paymentMethod)} {lancamento.paymentMethod}
  • Tipo de Transação {lancamento.transactionType}
  • Responsável {lancamento.pagadorName}
  • {lancamento.note && ( )}
    {isInstallment && (
  • )} {isInstallment && ( )} {lancamento.recurrenceCount && ( )} {!isInstallment && }
  • Total da Compra {currencyFormatter.format(valorTotal)}
); } interface DetailRowProps { label: string; value: string; } function DetailRow({ label, value }: DetailRowProps) { return (
  • {label} {value}
  • ); }