"use client" import { Card, CardContent } from "@/shared/components/ui/card" import { Separator } from "@/shared/components/ui/separator" import { formatCurrency, formatEnum } from "@/shared/utils/formatters" import { useEstimate } from "./estimate-context" export function EstimateTotalsSummary() { const estimate = useEstimate() if (!estimate) return null const parts = estimate.estimate_parts ?? [] const services = estimate.estimate_services ?? [] const expenses = estimate.estimate_expense_items ?? [] const discount = estimate.discount const displayTotal = parseFloat(String(estimate.total ?? 0)) || 0 const hasItems = parts.length > 0 || services.length > 0 || expenses.length > 0 if (!hasItems && displayTotal === 0) return null const subTotal = parseFloat(String(estimate.sub_total ?? 0)) || 0 function lineTotal(items: { quantity?: string | number; rate?: string | number }[]) { return items.reduce((sum, item) => { const qty = parseFloat(String(item.quantity ?? 0)) const rate = parseFloat(String(item.rate ?? 0)) return sum + (isNaN(qty) || isNaN(rate) ? 0 : qty * rate) }, 0) } return (
{hasItems && ( <> {parts.length > 0 && (
Parts ({parts.length}) {formatCurrency(lineTotal(parts))}
)} {services.length > 0 && (
Services ({services.length}) {formatCurrency(lineTotal(services))}
)} {expenses.length > 0 && (
Expenses ({expenses.length}) {formatCurrency(lineTotal(expenses))}
)} )}
Subtotal {formatCurrency(subTotal)}
{discount && discount !== "no" && (
Discount ({formatEnum(discount)}) Applied
)}
Total {formatCurrency(displayTotal)}
) }