/** * ProposalDetailsCard Component * Displays proposal details submitted by dealer for Claim Management requests */ import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Receipt, Calendar } from 'lucide-react'; import { format } from 'date-fns'; // Minimal local types to avoid missing imports during runtime interface ProposalCostItem { description: string; amount?: number | null; } interface ProposalDetails { costBreakup: ProposalCostItem[]; estimatedBudgetTotal?: number | null; timelineForClosure?: string | null; dealerComments?: string | null; submittedOn?: string | null; } interface ProposalDetailsCardProps { proposalDetails: ProposalDetails; className?: string; } export function ProposalDetailsCard({ proposalDetails, className }: ProposalDetailsCardProps) { // Calculate estimated total from costBreakup if not provided const calculateEstimatedTotal = () => { if (proposalDetails.estimatedBudgetTotal !== undefined && proposalDetails.estimatedBudgetTotal !== null) { return proposalDetails.estimatedBudgetTotal; } // Calculate sum from costBreakup items if (proposalDetails.costBreakup && proposalDetails.costBreakup.length > 0) { const total = proposalDetails.costBreakup.reduce((sum, item) => { const amount = item.amount || 0; return sum + (Number.isNaN(amount) ? 0 : amount); }, 0); return total; } return 0; }; const estimatedTotal = calculateEstimatedTotal(); const formatCurrency = (amount?: number | null) => { if (amount === undefined || amount === null || Number.isNaN(amount)) { return '₹0.00'; } return `₹${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`; }; const formatDate = (dateString?: string | null) => { if (!dateString) return ''; try { return format(new Date(dateString), 'MMM d, yyyy, h:mm a'); } catch { return dateString || ''; } }; const formatTimelineDate = (dateString?: string | null) => { if (!dateString) return '-'; try { return format(new Date(dateString), 'MMM d, yyyy'); } catch { return dateString || '-'; } }; return ( Proposal Details {proposalDetails.submittedOn && ( Submitted on {formatDate(proposalDetails.submittedOn)} )} {/* Cost Breakup */}
{(proposalDetails.costBreakup || []).map((item, index) => ( ))}
Item Description Amount
{item.description} {formatCurrency(item.amount)}
Estimated Budget (Total) {formatCurrency(estimatedTotal)}
{/* Timeline for Closure */}
Expected completion by: {formatTimelineDate(proposalDetails.timelineForClosure)}
{/* Dealer Comments */} {proposalDetails.dealerComments && (

{proposalDetails.dealerComments}

)}
); }