import { cookies } from "next/headers" import { notFound } from "next/navigation" import { Typography } from "@scandic-hotels/design-system/Typography" import { homeHrefs } from "@/constants/homeHrefs" import { env } from "@/env/server" import { dt } from "@/lib/dt" import { getAncillaryPackages, getBookingConfirmation, getPackages, getProfileSafely, getSavedPaymentCardsSafely, } from "@/lib/trpc/memoizedRequests" import { decrypt } from "@/server/routers/utils/encryption" import Image from "@/components/Image" import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" import AdditionalInfoForm from "../FindMyBooking/AdditionalInfoForm" import accessBooking, { ACCESS_GRANTED, ERROR_BAD_REQUEST, ERROR_UNAUTHORIZED, } from "./accessBooking" import { Ancillaries } from "./Ancillaries" import BookingSummary from "./BookingSummary" import { Header } from "./Header" import Promo from "./Promo" import { ReferenceCard } from "./ReferenceCard" import Rooms from "./Rooms" import styles from "./myStay.module.css" import { BreakfastPackageEnum } from "@/types/enums/breakfast" export async function MyStay({ refId }: { refId: string }) { const value = decrypt(refId) if (!value) { return notFound() } const [confirmationNumber, lastName] = value.split(",") const bookingConfirmation = await getBookingConfirmation(confirmationNumber) if (!bookingConfirmation) { return notFound() } const { booking, hotel, additionalData, room } = bookingConfirmation const user = await getProfileSafely() const bv = cookies().get("bv")?.value const intl = await getIntl() const access = accessBooking(booking.guest, lastName, user, bv) if (access === ACCESS_GRANTED) { const lang = getLang() const ancillaryPackages = await getAncillaryPackages({ fromDate: dt(booking.checkInDate).format("YYYY-MM-DD"), hotelId: hotel.operaId, toDate: dt(booking.checkOutDate).format("YYYY-MM-DD"), }) const packages = await getPackages({ startDate: dt(booking.checkInDate).format("YYYY-MM-DD"), hotelId: hotel.operaId, endDate: dt(booking.checkOutDate).format("YYYY-MM-DD"), adults: booking.adults, children: booking.childrenAges.length, packageCodes: [ BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST, BreakfastPackageEnum.ANCILLARY_CHILD_PAYING_BREAKFAST, BreakfastPackageEnum.FREE_CHILD_BREAKFAST, ], lang, }) const supportedCards = hotel.merchantInformationData.cards const savedCreditCards = await getSavedPaymentCardsSafely({ supportedCards, }) const imageSrc = hotel.hotelContent.images.imageSizes.large ?? additionalData.gallery?.heroImages[0]?.imageSizes.large ?? hotel.galleryImages[0]?.imageSizes.large return ( {imageSrc && ( )} {booking.showAncillaries && ( )} ) } if (access === ERROR_BAD_REQUEST) { return ( ) } if (access === ERROR_UNAUTHORIZED) { return ( {intl.formatMessage({ id: "You need to be logged in to view your booking", })} {intl.formatMessage({ id: "And you need to be logged in with the same member account that made the booking.", })} ) } return notFound() }
{intl.formatMessage({ id: "And you need to be logged in with the same member account that made the booking.", })}