"use client"; import Image from "next/image"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { useEffect, useState } from "react"; import { RoomSelectBooking } from "@/components/RoomSelectBooking"; import { useBooking } from "@/context/BookingContext"; import { rooms } from "@/lib/mocks/rooms"; import { siteConfig } from "@/lib/mocks/site"; import { submitBookingHold } from "@/lib/mocks/api"; export function BookingPageClient() { const searchParams = useSearchParams(); const router = useRouter(); const { checkIn, checkOut, guests, guest, setRoomId, setGuest, setHoldReference, setPayLaterHold, selectedRoom, nights, } = useBooking(); const [pending, setPending] = useState(null); const [error, setError] = useState(null); useEffect(() => { const r = searchParams.get("room"); if (r && rooms.some((x) => x.id === r)) setRoomId(r); }, [searchParams, setRoomId]); const canContinue = selectedRoom && guest.firstName.trim() && guest.lastName.trim() && guest.email.trim() && guest.phone.trim() && guest.flightBookingNumber.trim() && guest.arrivalTime.trim(); async function placeHold(mode: "payment" | "reserve") { if (!canContinue || !selectedRoom) return; setError(null); setPending(mode); try { const { reference } = await submitBookingHold({ roomId: selectedRoom.id, email: guest.email, flightBookingNumber: guest.flightBookingNumber.trim(), arrivalTime: guest.arrivalTime.trim(), }); setHoldReference(reference); setPayLaterHold(mode === "reserve"); router.push(mode === "payment" ? "/payment" : "/reserve-held"); } catch { setError("Something went wrong. Please try again."); } finally { setPending(null); } } return (

Book your stay

It only takes a moment

Pay now, or reserve first and complete payment later in this session — mock only.

{selectedRoom ? (
{selectedRoom.name}
) : (

Select a room to continue.

Browse rooms
)}

Who's checking in?

Flight arrival

So we can coordinate your airport shuttle and room readiness.

{error ?

{error}

: null}

Pay later keeps your details and hold reference; finish checkout from the next screen whenever you're ready.

); } function Row({ label, value }: { label: string; value: string }) { return (
{label} {value}
); } function formatDate(iso: string) { try { return new Intl.DateTimeFormat("en-GB", { day: "numeric", month: "short", year: "numeric", }).format(new Date(iso + "T12:00:00")); } catch { return iso; } }