"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 { Progress } from "@/components/ui/progress"; import { cn } from "@/lib/utils/ui"; import { RiArrowDownSLine, RiArrowRightSLine } from "@remixicon/react"; import { format } from "date-fns"; import { ptBR } from "date-fns/locale"; import { useState } from "react"; import type { InstallmentGroup } from "./types"; type InstallmentGroupCardProps = { group: InstallmentGroup; selectedInstallments: Set; onToggleGroup: () => void; onToggleInstallment: (installmentId: string) => void; }; export function InstallmentGroupCard({ group, selectedInstallments, onToggleGroup, onToggleInstallment, }: InstallmentGroupCardProps) { const [isExpanded, setIsExpanded] = useState(false); const isFullySelected = selectedInstallments.size === group.pendingInstallments.length && group.pendingInstallments.length > 0; const isPartiallySelected = selectedInstallments.size > 0 && selectedInstallments.size < group.pendingInstallments.length; const progress = group.totalInstallments > 0 ? ((group.paidInstallments + selectedInstallments.size) / group.totalInstallments) * 100 : 0; const selectedAmount = group.pendingInstallments .filter((i) => selectedInstallments.has(i.id)) .reduce((sum, i) => sum + i.amount, 0); return ( {/* Header do card */}

{group.name}

{group.cartaoName && ( <> {group.cartaoName} )} {group.paymentMethod}
{selectedInstallments.size > 0 && ( )}
{/* Progress bar */}
{group.paidInstallments} de {group.totalInstallments} pagas {group.pendingInstallments.length}{" "} {group.pendingInstallments.length === 1 ? "pendente" : "pendentes"}
{/* Badges de status */}
{isPartiallySelected && ( {selectedInstallments.size} de{" "} {group.pendingInstallments.length} selecionadas )}
{/* Botão de expandir */}
{/* Lista de parcelas expandida */} {isExpanded && (
{group.pendingInstallments.map((installment) => { const isSelected = selectedInstallments.has(installment.id); const dueDate = installment.dueDate ? format(installment.dueDate, "dd/MM/yyyy", { locale: ptBR }) : format(installment.purchaseDate, "dd/MM/yyyy", { locale: ptBR, }); return (
onToggleInstallment(installment.id)} aria-label={`Selecionar parcela ${installment.currentInstallment} de ${group.totalInstallments}`} />

Parcela {installment.currentInstallment}/ {group.totalInstallments}

Vencimento: {dueDate}

); })}
)}
); }