import React, { useState } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'; import { Button } from './ui/button'; import { Input } from './ui/input'; import { Label } from './ui/label'; import { Textarea } from './ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select'; import { Badge } from './ui/badge'; import { Progress } from './ui/progress'; import { Calendar } from './ui/calendar'; import { Popover, PopoverContent, PopoverTrigger } from './ui/popover'; import { motion, AnimatePresence } from 'motion/react'; import { ArrowLeft, ArrowRight, Calendar as CalendarIcon, Check, Receipt, Building, MapPin, Clock, CheckCircle, Info, FileText, DollarSign } from 'lucide-react'; import { format } from 'date-fns'; import { toast } from 'sonner@2.0.3'; import { getAllDealers, getDealerInfo, formatDealerAddress, type DealerInfo } from '../utils/dealerDatabase'; interface ClaimManagementWizardProps { onBack?: () => void; onSubmit?: (claimData: any) => void; } const CLAIM_TYPES = [ 'Marketing Activity', 'Promotional Event', 'Dealer Training', 'Infrastructure Development', 'Customer Experience Initiative', 'Service Campaign' ]; // Fetch dealers from database const DEALERS = getAllDealers(); const STEP_NAMES = [ 'Claim Details', 'Review & Submit' ]; export function ClaimManagementWizard({ onBack, onSubmit }: ClaimManagementWizardProps) { const [currentStep, setCurrentStep] = useState(1); const [formData, setFormData] = useState({ activityName: '', activityType: '', dealerCode: '', dealerName: '', dealerEmail: '', dealerPhone: '', dealerAddress: '', activityDate: undefined as Date | undefined, location: '', requestDescription: '', periodStartDate: undefined as Date | undefined, periodEndDate: undefined as Date | undefined, estimatedBudget: '' }); const totalSteps = STEP_NAMES.length; const updateFormData = (field: string, value: any) => { setFormData(prev => ({ ...prev, [field]: value })); }; const isStepValid = () => { switch (currentStep) { case 1: return formData.activityName && formData.activityType && formData.dealerCode && formData.dealerName && formData.activityDate && formData.location && formData.requestDescription; case 2: return true; default: return false; } }; const nextStep = () => { if (currentStep < totalSteps && isStepValid()) { setCurrentStep(currentStep + 1); } }; const prevStep = () => { if (currentStep > 1) { setCurrentStep(currentStep - 1); } }; const handleDealerChange = (dealerCode: string) => { const dealer = getDealerInfo(dealerCode); if (dealer) { updateFormData('dealerCode', dealer.code); updateFormData('dealerName', dealer.name); updateFormData('dealerEmail', dealer.email); updateFormData('dealerPhone', dealer.phone); updateFormData('dealerAddress', formatDealerAddress(dealer)); } }; const handleSubmit = () => { const claimData = { ...formData, templateType: 'claim-management', submittedAt: new Date().toISOString(), status: 'pending', currentStep: 'initiator-review', workflowSteps: [ { step: 1, name: 'Initiator Evaluation', status: 'pending', approver: 'Current User (Initiator)', description: 'Review and confirm all claim details and documents' }, { step: 2, name: 'IO Confirmation', status: 'waiting', approver: 'System', description: 'Automatic IO generation upon initiator approval' }, { step: 3, name: 'Department Lead Approval', status: 'waiting', approver: 'Department Lead', description: 'Budget blocking and final approval' }, { step: 4, name: 'Document Submission', status: 'waiting', approver: 'Dealer', description: 'Dealer submits completion documents' }, { step: 5, name: 'Document Verification', status: 'waiting', approver: 'Initiator', description: 'Verify completion documents' }, { step: 6, name: 'E-Invoice Generation', status: 'waiting', approver: 'System', description: 'Auto-generate e-invoice based on approved amount' }, { step: 7, name: 'Credit Note Issuance', status: 'waiting', approver: 'Finance', description: 'Issue credit note to dealer' } ] }; toast.success('Claim Request Created', { description: 'Your claim management request has been submitted successfully.' }); if (onSubmit) { onSubmit(claimData); } }; const renderStepContent = () => { switch (currentStep) { case 1: return (

Claim Details

Provide comprehensive information about your claim request

{/* Activity Name and Type */}
updateFormData('activityName', e.target.value)} className="mt-2 h-12" />
{/* Dealer Selection */}
{formData.dealerCode && (

Selected: {formData.dealerName} ({formData.dealerCode})

)}
{/* Date and Location */}
updateFormData('activityDate', date)} initialFocus />
updateFormData('location', e.target.value)} className="mt-2 h-12" />
{/* Request Detail */}