'use client' import { CalendarDays, Clock3, Info, MapPin, TicketPercent } from 'lucide-react' import { useRouter } from 'next/navigation' import { useState } from 'react' type ExploreSearchFormDict = { searchTitle: string pickupLocation: string dropoffLocation: string sameDropoff: string differentDropoff: string sameAsPickup: string pickupDate: string returnDate: string hour: string promoCode: string myAge: string ageDescription: string search: string ageOptions: string[] } function toUtcDateTime(date: string, time: string) { if (!date) return '' return `${date}T${time || '10:00'}:00.000Z` } const inputBase = 'w-full border-0 bg-white dark:bg-blue-900/30 px-4 py-4 text-sm text-stone-900 dark:text-stone-100 outline-none placeholder:text-stone-400 dark:placeholder:text-stone-500' const selectBase = 'w-full border-0 bg-white dark:bg-blue-900/30 py-4 text-sm text-stone-900 dark:text-stone-100 outline-none' export default function ExploreSearchForm({ pickupLocation, dropoffLocation, dropoffMode, pickupDate, pickupTime, returnDate, returnTime, promoCode, driverAge, cities, dict, }: { pickupLocation: string dropoffLocation: string dropoffMode: 'same' | 'different' pickupDate: string pickupTime: string returnDate: string returnTime: string promoCode: string driverAge: string cities: string[] dict: ExploreSearchFormDict }) { const router = useRouter() const cityOptions = Array.isArray(cities) ? cities : [] const ageOptions = Array.isArray(dict.ageOptions) ? dict.ageOptions : [] const [filters, setFilters] = useState({ pickupLocation, dropoffLocation, dropoffMode, pickupDate, pickupTime: pickupTime || '10:00', returnDate, returnTime: returnTime || '10:00', promoCode, driverAge: driverAge || '25+', }) const [ageHelpOpen, setAgeHelpOpen] = useState(false) function updateFilter(name: keyof typeof filters, value: string) { setFilters((current) => ({ ...current, [name]: value })) } function handleSubmit(event: React.FormEvent) { event.preventDefault() const query = new URLSearchParams() const normalizedPickup = filters.pickupLocation.trim() const normalizedDropoff = filters.dropoffMode === 'different' ? filters.dropoffLocation.trim() : normalizedPickup const normalizedPromo = filters.promoCode.trim() if (normalizedPickup) { query.set('pickupLocation', normalizedPickup) query.set('city', normalizedPickup) } query.set('dropoffMode', filters.dropoffMode) if (filters.dropoffMode === 'different' && normalizedDropoff) { query.set('dropoffLocation', normalizedDropoff) } if (filters.pickupDate) query.set('pickupDate', filters.pickupDate) if (filters.pickupTime) query.set('pickupTime', filters.pickupTime) if (filters.returnDate) query.set('returnDate', filters.returnDate) if (filters.returnTime) query.set('returnTime', filters.returnTime) if (normalizedPromo) query.set('promoCode', normalizedPromo) if (filters.driverAge) query.set('driverAge', filters.driverAge) const startDateTime = toUtcDateTime(filters.pickupDate, filters.pickupTime) const endDateTime = toUtcDateTime(filters.returnDate, filters.returnTime) if (startDateTime) query.set('startDate', startDateTime) if (endDateTime) query.set('endDate', endDateTime) const target = query.toString() ? `/explore?${query.toString()}` : '/explore' router.push(target) } return (

{dict.searchTitle}

{dict.dropoffLocation}
{filters.dropoffMode === 'different' ? ( ) : (
{filters.pickupLocation || dict.sameAsPickup}
)}
) }