"use client"; import MoneyValues from "@/components/money-values"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { cn } from "@/lib/utils/ui"; import { RiArrowDownSLine, RiArrowRightSLine, RiBillLine } from "@remixicon/react"; import { format, parse } from "date-fns"; import { ptBR } from "date-fns/locale"; import { useState } from "react"; import type { PendingInvoice } from "./types"; import Image from "next/image"; type PendingInvoiceCardProps = { invoice: PendingInvoice; isSelected: boolean; onToggle: () => void; }; export function PendingInvoiceCard({ invoice, isSelected, onToggle, }: PendingInvoiceCardProps) { const [isExpanded, setIsExpanded] = useState(false); // Formatar período (YYYY-MM) para texto legível const periodDate = parse(invoice.period, "yyyy-MM", new Date()); const periodText = format(periodDate, "MMMM 'de' yyyy", { locale: ptBR }); // Calcular data de vencimento aproximada const dueDay = parseInt(invoice.dueDay, 10); const dueDate = new Date(periodDate); dueDate.setDate(dueDay); const dueDateText = format(dueDate, "dd/MM/yyyy", { locale: ptBR }); return ( {/* Header do card */}
{invoice.cartaoLogo ? ( {invoice.cartaoName} ) : (
)}

{invoice.cartaoName}

{periodText} Vencimento: {dueDateText}
{/* Badge de status */}
Pendente {invoice.lancamentos.length}{" "} {invoice.lancamentos.length === 1 ? "lançamento" : "lançamentos"}
{/* Botão de expandir */}
{/* Lista de lançamentos expandida */} {isExpanded && (
{invoice.lancamentos.map((lancamento) => { const purchaseDate = format( lancamento.purchaseDate, "dd/MM/yyyy", { locale: ptBR } ); const installmentLabel = lancamento.condition === "Parcelado" && lancamento.currentInstallment && lancamento.installmentCount ? `${lancamento.currentInstallment}/${lancamento.installmentCount}` : null; return (

{lancamento.name}

{purchaseDate} {installmentLabel && ( <> Parcela {installmentLabel} )} {lancamento.condition !== "Parcelado" && ( <> {lancamento.condition} )}
); })}
)}
); }