import { useState, useEffect } from 'react'; import { Button } from '../ui/button'; import { Input } from '../ui/input'; import { Textarea } from '../ui/textarea'; import { Checkbox } from '../ui/checkbox'; import { LogIn, ChevronRight, ChevronDown } from 'lucide-react'; import { toast } from 'sonner'; import { onboardingService } from '../../services/onboarding.service'; import { masterService } from '../../services/master.service'; interface ApplicationFormPageProps { onAdminLogin: () => void; } export function ApplicationFormPage({ onAdminLogin }: ApplicationFormPageProps) { const [formData, setFormData] = useState({ country: 'India', stateId: '', districtId: '', name: '', interestedCity: '', email: '', pincode: '', mobile: '', ownRoyalEnfield: '', royalEnfieldModel: '', age: '', education: '', companyName: '', source: '', existingDealer: '', description: '', address: '', acceptTerms: false }); const [otpVerified, setOtpVerified] = useState(false); const [states, setStates] = useState([]); const [districts, setDistricts] = useState([]); useEffect(() => { fetchStates(); }, []); const fetchStates = async () => { try { const response: any = await masterService.getStates(); const statesArray = Array.isArray(response) ? response : (response?.data || response?.states || []); setStates(statesArray); } catch (error) { console.error('Error fetching states:', error); } }; const handleStateChange = async (stateId: string) => { if (!stateId) return; setFormData(prev => ({ ...prev, stateId, districtId: '' })); setDistricts([]); try { const response: any = await masterService.getDistricts(stateId); const districtsArray = Array.isArray(response) ? response : (response?.data || response?.districts || []); setDistricts(districtsArray); } catch (error) { console.error('Error fetching districts:', error); } }; const handleVerifyMobile = () => { if (!formData.mobile || formData.mobile.length < 10) { toast.error('Please enter a valid mobile number'); return; } toast.success('OTP sent to ' + formData.mobile); setTimeout(() => { setOtpVerified(true); toast.success('Mobile number verified'); }, 1500); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.country || !formData.stateId || !formData.districtId || !formData.name || !formData.interestedCity || !formData.email || !formData.pincode || !formData.mobile || !formData.ownRoyalEnfield || !formData.age || !formData.education || !formData.companyName || !formData.source || !formData.existingDealer || !formData.description || !formData.address) { toast.error('Please fill in all required fields'); return; } if (!otpVerified) { toast.error('Please verify your mobile number'); return; } if (!formData.acceptTerms) { toast.error('Please accept the terms and conditions'); return; } try { const selectedState = states.find((s: any) => s.id === formData.stateId); const selectedDistrict = districts.find((d: any) => d.id === formData.districtId); const stateName = selectedState?.name || selectedState?.stateName || ''; const districtName = selectedDistrict?.name || selectedDistrict?.districtName || ''; const payload = { applicantName: formData.name, email: formData.email, phone: formData.mobile, state: stateName, city: formData.interestedCity, district: districtName, preferredLocation: `${formData.interestedCity}, ${stateName}`, businessType: 'Dealership', locationType: 'district', locationId: formData.districtId, address: formData.address, pincode: formData.pincode, age: formData.age, education: formData.education, companyName: formData.companyName, source: formData.source, existingDealer: formData.existingDealer === 'yes', ownRoyalEnfield: formData.ownRoyalEnfield === 'yes', royalEnfieldModel: formData.royalEnfieldModel, description: formData.description, experienceYears: 0, investmentCapacity: 'Unknown' }; await onboardingService.submitApplication(payload); toast.success('Application submitted successfully'); setFormData({ country: 'India', stateId: '', districtId: '', name: '', interestedCity: '', email: '', pincode: '', mobile: '', ownRoyalEnfield: '', royalEnfieldModel: '', age: '', education: '', companyName: '', source: '', existingDealer: '', description: '', address: '', acceptTerms: false }); setOtpVerified(false); } catch (error: any) { toast.error(error.response?.data?.message || 'Failed to submit application.'); } }; const reModels = [ "Classic 650", "Scram 440", "Goan Classic 350", "Bear 650", "Guerrilla 450", "Shotgun 650", "Himalayan 450", "Bullet 350", "Super Meteor 650", "Hunter 350", "Scram 411", "Meteor 350", "Interceptor INT 650", "Continental GT 650", "Classic 350", "Other Royal Enfield motorcycle" ]; const sourceOptions = [ "Existing RE dealer", "Customer", "RE Employee", "News Paper", "Website", "Friends", "Others" ]; return (
{/* Background Image Wrapper */}
Royal Enfield Background
{/* Navigation Header */} {/* Main Content Area over the background */}
{/* Content Container with white background */}
{/* Introductory Text */}

Become a Dealer

At Royal Enfield, we endeavour to partner our patrons and customers in their journeys of exploration. Our main objective is to provide an immersive brand and retail experience in addition to ensuring a superior product experience. Our dealers, distributors and network teams are our extended partners in this task.

Royal Enfield employs a comprehensive and professional process for Dealership allotment. Dealer selection is done based on a variety of criteria including a personal meeting with the applicant. It is only post completion of the evaluation and selection process, that other formalities are considered.

Royal Enfield does not accept or demand money / deposits from prospective partners prior to processing the application or candidature of the Dealership.

If you receive any communication offering allotment of Royal Enfield Dealership against payment / transfer of money and / or otherwise, we advise you to seek information / clarifications by writing to us at support@royalenfield.com or by contacting us on our customer care toll-free number 1800 210 0008.

*This is the ONLY official website and central number for dealership enquiries for Royal Enfield and we do not have any other partner website(s).

{/* Form */}
{/* Country Selection */}
{/* Personal Details - Two Column */}
setFormData({...formData, name: e.target.value})} /> setFormData({...formData, interestedCity: e.target.value})} /> setFormData({...formData, email: e.target.value})} /> setFormData({...formData, pincode: e.target.value})} />
setFormData({...formData, mobile: e.target.value})} /> {!otpVerified ? ( ) : ( Verified )}
Own a Royal Enfield?
{['yes', 'no'].map(val => (
setFormData({...formData, age: e.target.value})} />
setFormData({...formData, education: e.target.value})} /> setFormData({...formData, companyName: e.target.value})} />
Are you an existing Dealer / Vendor of Royal Enfield?
{['yes', 'no'].map(val => (
{/* Full Width Text Areas */}