import React, { useState } from 'react'; import { PageHeader } from '../../components/layout/PageHeader'; import { Card } from '../../components/layout/Card'; import { StepProgress } from '../../components/layout/StepProgress'; import { FormSection } from '../../components/forms/FormSection'; import { FormField } from '../../components/forms/FormField'; import { SelectField } from '../../components/forms/SelectField'; import { PhoneInput } from '../../components/forms/PhoneInput'; import { EINInput } from '../../components/forms/EINInput'; import { Button } from '../../components/shared/Button'; import { Toast } from '../../components/shared/Toast'; import { useMCPApp } from '../../hooks/useMCPApp'; import { useSmartAction } from '../../hooks/useSmartAction'; import type { RegistrationInput } from '../../../src/types'; const STEPS = [ { label: 'Business Info', description: 'Basic details' }, { label: 'Authorized Rep', description: 'Contact person' }, { label: 'Address', description: 'Business location' }, { label: 'Campaign', description: 'Use case & messages' }, { label: 'Review', description: 'Confirm & submit' } ]; export default function RegistrationWizard() { const { context, loading: contextLoading } = useMCPApp<{ prefillData?: RegistrationInput }>(); const { callTool, loading: submitting } = useSmartAction(); const [currentStep, setCurrentStep] = useState(0); const [toast, setToast] = useState<{ message: string; type: 'success' | 'error' } | null>(null); const [formData, setFormData] = useState>( context?.prefillData || { business: {}, authorizedRep: {}, address: {}, campaign: { sampleMessages: [''], hasEmbeddedLinks: false, hasEmbeddedPhone: false }, phone: {} } as any ); const updateField = (section: keyof RegistrationInput, field: string, value: any) => { setFormData(prev => ({ ...prev, [section]: { ...(prev[section] as any), [field]: value } })); }; const handleNext = () => { if (currentStep < STEPS.length - 1) { setCurrentStep(currentStep + 1); } }; const handlePrevious = () => { if (currentStep > 0) { setCurrentStep(currentStep - 1); } }; const handleSubmit = async () => { try { await callTool('a2p_submit_registration', formData); setToast({ message: 'Registration submitted successfully!', type: 'success' }); setTimeout(() => { // In production, this would close the app or navigate window.location.reload(); }, 2000); } catch (error) { setToast({ message: 'Submission failed. Please try again.', type: 'error' }); } }; if (contextLoading) { return
Loading...
; } return (
{/* Step Progress */} {/* Step Content */}
{currentStep === 0 && ( updateField('business', 'businessName', e.target.value)} required /> updateField('business', 'businessType', e.target.value)} required /> updateField('business', 'registrationNumber', e.target.value)} required helpText="Format: XX-XXXXXXX" /> updateField('business', 'websiteUrl', e.target.value)} required /> updateField('business', 'businessIndustry', e.target.value)} required /> updateField('business', 'companyType', e.target.value)} required /> )} {currentStep === 1 && ( updateField('authorizedRep', 'firstName', e.target.value)} required /> updateField('authorizedRep', 'lastName', e.target.value)} required /> updateField('authorizedRep', 'businessTitle', e.target.value)} required /> updateField('authorizedRep', 'jobPosition', e.target.value)} required /> updateField('authorizedRep', 'phoneNumber', e.target.value)} required /> updateField('authorizedRep', 'email', e.target.value)} required /> )} {currentStep === 2 && ( updateField('address', 'street', e.target.value)} required className="col-span-2" /> updateField('address', 'city', e.target.value)} required /> updateField('address', 'region', e.target.value)} required maxLength={2} placeholder="CA" /> updateField('address', 'postalCode', e.target.value)} required /> updateField('address', 'isoCountry', e.target.value)} required maxLength={2} /> )} {currentStep === 3 && ( updateField('campaign', 'useCase', e.target.value)} required className="col-span-2" />