import React, { useState } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '../ui/dialog'; import { Button } from '../ui/button'; import { Label } from '../ui/label'; import { Textarea } from '../ui/textarea'; import { Badge } from '../ui/badge'; import { Upload, FileText, X, CheckCircle, AlertCircle } from 'lucide-react'; import { toast } from 'sonner@2.0.3'; interface DealerDocumentModalProps { isOpen: boolean; onClose: () => void; onSubmit: (data: { proposalDocument: File | null; costBreakup: File | null; timeline: File | null; otherDocuments: File[]; dealerComments: string; }) => Promise; dealerName: string; activityName: string; } export function DealerDocumentModal({ isOpen, onClose, onSubmit, dealerName, activityName }: DealerDocumentModalProps) { const [proposalDocument, setProposalDocument] = useState(null); const [costBreakup, setCostBreakup] = useState(null); const [timeline, setTimeline] = useState(null); const [otherDocuments, setOtherDocuments] = useState([]); const [dealerComments, setDealerComments] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const handleFileUpload = (field: 'proposal' | 'cost' | 'timeline', file: File | null) => { if (field === 'proposal') setProposalDocument(file); if (field === 'cost') setCostBreakup(file); if (field === 'timeline') setTimeline(file); }; const handleMultipleFileUpload = (files: FileList | null) => { if (files) { const fileArray = Array.from(files); setOtherDocuments(prev => [...prev, ...fileArray]); } }; const removeOtherDocument = (index: number) => { setOtherDocuments(prev => prev.filter((_, i) => i !== index)); }; const handleSubmit = async () => { // Validation if (!proposalDocument) { toast.error('Proposal document is required'); return; } if (!costBreakup) { toast.error('Cost breakup document is required'); return; } if (!timeline) { toast.error('Timeline document is required'); return; } if (!dealerComments.trim()) { toast.error('Please add dealer comments'); return; } setIsSubmitting(true); try { await onSubmit({ proposalDocument, costBreakup, timeline, otherDocuments, dealerComments }); // Reset form setProposalDocument(null); setCostBreakup(null); setTimeline(null); setOtherDocuments([]); setDealerComments(''); onClose(); } catch (error) { console.error('Error submitting dealer documents:', error); } finally { setIsSubmitting(false); } }; return ( Dealer Document Upload

Dealer: {dealerName}

Activity: {activityName}

Please upload all required documents and provide detailed comments about this claim request.

{/* Required Documents Section */}

Required Documents

All Required
{/* Proposal Document */}

Detailed proposal with activity details and requested information

handleFileUpload('proposal', e.target.files?.[0] || null)} className="hidden" id="proposalDoc" />
{/* Cost Breakup */}

Detailed cost analysis and breakdown

handleFileUpload('cost', e.target.files?.[0] || null)} className="hidden" id="costDoc" />
{/* Timeline for Closure */}

Project timeline and milestone details

handleFileUpload('timeline', e.target.files?.[0] || null)} className="hidden" id="timelineDoc" />
{/* Optional Documents */}

Other Supporting Documents

Optional

Any other supporting documents (invoices, receipts, photos, etc.)

handleMultipleFileUpload(e.target.files)} className="hidden" id="otherDocs" />
{otherDocuments.length > 0 && (
{otherDocuments.map((file, index) => (
{file.name} ({(file.size / 1024).toFixed(1)} KB)
))}
)}
{/* Dealer Comments */}