import { dt } from "@/lib/dt" import { serverClient } from "@/lib/trpc/server" import { CalendarIcon, DownloadIcon, ImageIcon, PrinterIcon, } from "@/components/Icons" import Button from "@/components/TempDesignSystem/Button" import Divider from "@/components/TempDesignSystem/Divider" import Link from "@/components/TempDesignSystem/Link" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Title from "@/components/TempDesignSystem/Text/Title" import { getIntl } from "@/i18n" import styles from "./page.module.css" import type { LangParams, PageArgs } from "@/types/params" export default async function BookingConfirmationPage({ params, searchParams, }: PageArgs) { const confirmationNumber = searchParams.confirmationNumber const booking = await serverClient().booking.confirmation({ confirmationNumber, }) if (!booking) { return null } const intl = await getIntl() const text = intl.formatMessage( { id: "booking.confirmation.text" }, { emailLink: (str) => ( {str} ), } ) const fromDate = dt(booking.temp.fromDate).locale(params.lang) const toDate = dt(booking.temp.toDate).locale(params.lang) const nights = intl.formatMessage( { id: "booking.nights" }, { totalNights: dt(toDate.format("YYYY-MM-DD")).diff( dt(fromDate.format("YYYY-MM-DD")), "days" ), } ) return (
{intl.formatMessage({ id: "booking.confirmation.title" })} {booking.hotel.name}
{text}
{intl.formatMessage( { id: "Reference #{bookingNr}" }, { bookingNr: "A92320VV" } )}
  • {intl.formatMessage({ id: "Check-in" })} {`${fromDate.format("ddd, D MMM")} ${intl.formatMessage({ id: "from" })} ${fromDate.format("HH:mm")}`}
  • {intl.formatMessage({ id: "Check-out" })} {`${toDate.format("ddd, D MMM")} ${intl.formatMessage({ id: "from" })} ${toDate.format("HH:mm")}`}
  • {intl.formatMessage({ id: "Breakfast" })} {booking.temp.breakfastFrom} - {booking.temp.breakfastTo}
  • {intl.formatMessage({ id: "Cancellation policy" })} {intl.formatMessage({ id: booking.temp.cancelPolicy })}
  • {intl.formatMessage({ id: "Rebooking" })} {`${intl.formatMessage({ id: "Free until" })} ${fromDate.subtract(3, "day").format("ddd, D MMM")}`}
{intl.formatMessage({ id: "Guest" })}
{`${booking.guest.firstName} ${booking.guest.lastName}${booking.guest.memberbershipNumber ? ` (${intl.formatMessage({ id: "member no" })} ${booking.guest.memberbershipNumber})` : ""}`} {booking.guest.email} {booking.guest.phoneNumber}
{intl.formatMessage({ id: "Your hotel" })}
{booking.hotel.name} {booking.hotel.email} {booking.hotel.phoneNumber}
{`${booking.temp.room.type}, ${nights}`} {booking.temp.room.price}
{booking.temp.packages.map((pkg) => (
{pkg.name} {pkg.price}
))}
{intl.formatMessage({ id: "VAT" })} {booking.temp.room.vat}
{intl.formatMessage({ id: "Total cost" })} {booking.temp.total} {`${intl.formatMessage({ id: "Approx." })} ${booking.temp.totalInEuro}`}
{`${intl.formatMessage({ id: "Payment received" })} ${dt(booking.temp.payment).locale(params.lang).format("D MMM YYYY, h:mm z")}`} {intl.formatMessage( { id: "{card} ending with {cardno}" }, { card: "Mastercard", cardno: "2202", } )}
) } // const { email, hotel, stay, summary } = tempConfirmationData // const confirmationNumber = useMemo(() => { // if (typeof window === "undefined") return "" // const storedConfirmationNumber = sessionStorage.getItem( // BOOKING_CONFIRMATION_NUMBER // ) // TODO: cleanup stored values // sessionStorage.removeItem(BOOKING_CONFIRMATION_NUMBER) // return storedConfirmationNumber // }, []) // const bookingStatus = useHandleBookingStatus( // confirmationNumber, // BookingStatusEnum.BookingCompleted, // maxRetries, // retryInterval // ) // if ( // confirmationNumber === null || // bookingStatus.isError || // (bookingStatus.isFetched && !bookingStatus.data) // ) { // // TODO: handle error // throw new Error("Error fetching booking status") // } // if ( // bookingStatus.data?.reservationStatus === BookingStatusEnum.BookingCompleted // ) { // return