import MoneyValues from "@/components/money-values"; import { CardContent } from "@/components/ui/card"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import type { InstallmentExpensesData } from "@/lib/dashboard/expenses/installment-expenses"; import { calculateLastInstallmentDate, formatLastInstallmentDate, } from "@/lib/installments/utils"; import { RiNumbersLine, RiArrowRightSLine } from "@remixicon/react"; import Image from "next/image"; import Link from "next/link"; import { Progress } from "../ui/progress"; import { WidgetEmptyState } from "../widget-empty-state"; type InstallmentExpensesWidgetProps = { data: InstallmentExpensesData; }; const buildCompactInstallmentLabel = ( currentInstallment: number | null, installmentCount: number | null ) => { if (currentInstallment && installmentCount) { return `${currentInstallment} de ${installmentCount}`; } return null; }; const isLastInstallment = ( currentInstallment: number | null, installmentCount: number | null ) => { if (!currentInstallment || !installmentCount) return false; return currentInstallment === installmentCount && installmentCount > 1; }; const calculateRemainingInstallments = ( currentInstallment: number | null, installmentCount: number | null ) => { if (!currentInstallment || !installmentCount) return 0; return Math.max(0, installmentCount - currentInstallment); }; const calculateRemainingAmount = ( amount: number, currentInstallment: number | null, installmentCount: number | null ) => { const remaining = calculateRemainingInstallments( currentInstallment, installmentCount ); return amount * remaining; }; const formatEndDate = ( period: string, currentInstallment: number | null, installmentCount: number | null ) => { if (!currentInstallment || !installmentCount) return null; const lastDate = calculateLastInstallmentDate( period, currentInstallment, installmentCount ); return formatLastInstallmentDate(lastDate); }; const buildProgress = ( currentInstallment: number | null, installmentCount: number | null ) => { if (!currentInstallment || !installmentCount || installmentCount <= 0) { return 0; } return Math.min( 100, Math.max(0, (currentInstallment / installmentCount) * 100) ); }; export function InstallmentExpensesWidget({ data, }: InstallmentExpensesWidgetProps) { if (data.expenses.length === 0) { return ( } title="Nenhuma despesa parcelada" description="Lançamentos parcelados aparecerão aqui conforme forem registrados." /> ); } return ( Ver Análise Completa ); }