/* Superior Car Rental — Reservation flow, Chauffeur, About, Contact, How */ /* ========================= RESERVATION MODAL (3-step) ========================= */ const ReservationModal = ({ ctx, onClose, onComplete }) => { const [step, setStep] = useState(0); const [data, setData] = useState({ pickupDate: ctx.pickupDate, returnDate: ctx.returnDate, pickupLoc: ctx.pickupLoc, firstName: "", lastName: "", email: "", phone: "+971 ", country: "AE", licence: "uae", chauffeur: false, addDriver: false, childSeat: false, simCard: false, notes: "" }); const car = ctx.car; const days = Math.max(1, Math.round((new Date(data.returnDate) - new Date(data.pickupDate)) / 86400000)); const base = car.fromRate * days; const addOns = (data.chauffeur ? 800 * days : 0) + (data.addDriver ? 75 * days : 0) + (data.childSeat ? 50 * days : 0) + (data.simCard ? 35 * days : 0); const total = base + addOns; const next = () => setStep(Math.min(2, step+1)); const prev = () => setStep(Math.max(0, step-1)); const finish = () => { onComplete({ ...data, car, days, base, addOns, total }); }; return (
e.stopPropagation()} data-screen-label="reservation-modal">
Reservation
{step === 0 && "Dates & pickup"} {step === 1 && "Add-ons & options"} {step === 2 && "Your details"}
=0?(step===0?"curr":"done"):""}`}/>
=1?(step===1?"curr":"done"):""}`}/>
=2?(step===2?"curr":"done"):""}`}/>
{/* Summary always visible */}
{car.make}
{car.model}
{car.year} · {car.power} · {car.transmission.split(" ")[0]}
{fmtDate(data.pickupDate)} → {fmtDate(data.returnDate)} · {days} day{days>1?"s":""}
{SCR_DATA.formatAED(total)}
{step === 0 && (
setData({...data, pickupDate: e.target.value})}/>
setData({...data, returnDate: e.target.value})}/>
{SCR_DATA.PICKUP_LOCATIONS.map(p => ( ))}
Delivery is included — we'll bring the {car.model} to your chosen pickup at the start of your rental and collect it at the end. No counter visit needed.
)} {step === 1 && (
setData({...data, chauffeur: v})} title="Add a chauffeur" desc="English/Arabic licensed driver, available 24h." price={`+ AED 800 / day`}/> setData({...data, addDriver: v})} title="Additional driver" desc="Add a second registered driver to the rental." price={`+ AED 75 / day`}/> setData({...data, childSeat: v})} title="Child seat" desc="ISOFIX, suitable for 0–4 years." price={`+ AED 50 / day`}/> setData({...data, simCard: v})} title="UAE data SIM" desc="Pre-activated 50GB Etisalat SIM card." price={`+ AED 35 / day`}/>