import { Typography } from "@scandic-hotels/design-system/Typography" import Divider from "@/components/TempDesignSystem/Divider" import { getIntl } from "@/i18n" import styles from "./specification.module.css" import type { SpecificationProps } from "@/types/components/hotelReservation/myStay/receipt" import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" import { CurrencyEnum } from "@/types/enums/currency" export default async function Specification({ ancillaryPackages, booking, currency, }: SpecificationProps) { const intl = await getIntl() const breakfastPackages = booking.packages.filter( (p) => p.type === "Breakfast" ) const breakfastTotalPriceInMoney = breakfastPackages .filter((p) => p.currency !== CurrencyEnum.POINTS) .reduce((acc, curr) => acc + curr.totalPrice, 0) const breakfastTotalPriceInPoints = breakfastPackages .filter((p) => p.currency === CurrencyEnum.POINTS) .reduce((acc, curr) => acc + curr.totalPrice, 0) const breakfastCount = breakfastPackages.reduce( (acc, curr) => acc + curr.unit, 0 ) const displayBreakfastPrice = breakfastCount > 0 && !booking.rateDefinition.breakfastIncluded const breakfastMoneyString = breakfastTotalPriceInMoney > 0 ? `${breakfastTotalPriceInMoney} ${currency}` : "" const breakfastPointsString = breakfastTotalPriceInPoints > 0 ? `${breakfastTotalPriceInPoints} ${intl.formatMessage({ id: "Points" })}` : "" const breakfastPlusString = breakfastMoneyString && breakfastPointsString ? " + " : "" const petRoomPackage = booking.packages.find( (p) => p.code === RoomPackageCodeEnum.PET_ROOM ) const roomPriceExclVat = booking.roomPrice - (booking.roomPrice * booking.vatPercentage) / 100 const roomPriceVat = booking.roomPrice - roomPriceExclVat return (
{/****** The room ********/} {intl.formatMessage({ id: "Accommodation" })} {!booking.rateDefinition.mustBeGuaranteed && ( <> {" - "} {intl.formatMessage({ id: "Room is prepaid" })} )}
{intl.formatMessage({ id: "Price including VAT" })}
{!booking.rateDefinition.mustBeGuaranteed && `(${intl.formatMessage({ id: "PREPAID" })}) `} {`${booking.roomPrice} ${currency}`}
{petRoomPackage && ( <>
{intl.formatMessage({ id: "Pet room charge including VAT" })}
{`${petRoomPackage.totalPrice} ${petRoomPackage.currency}`}
)}
{intl.formatMessage({ id: "Price excluding VAT" })}
{`${roomPriceExclVat.toFixed(2)} ${currency}`}
{intl.formatMessage({ id: "VAT" })} {booking.vatPercentage} %
{`${roomPriceVat.toFixed(2)} ${currency}`}
{/****** Ancillaries ********/} {booking.ancillaries.map((ancillary) => ( <>
{ancillaryPackages?.flatMap((a) => a.ancillaryContent.filter( (aa) => aa.id === ancillary.code || aa.loyaltyCode === ancillary.code ) )[0]?.title ?? intl.formatMessage({ id: "Unknown item" })} {`x ${ancillary.unit}`}
{ancillary.currency !== CurrencyEnum.POINTS ? intl.formatMessage({ id: "Price including VAT" }) : intl.formatMessage({ id: "Price" })}
{`${ancillary.totalPrice} ${ancillary.currency}`}
))} {/****** Breakfast ********/} {displayBreakfastPrice && ( <>
{intl.formatMessage({ id: "Breakfast" })} {`x ${breakfastCount}`}
{breakfastTotalPriceInMoney > 0 ? intl.formatMessage({ id: "Price including VAT" }) : intl.formatMessage({ id: "Price" })}
{`${breakfastMoneyString}${breakfastPlusString}${breakfastPointsString}`}
)}
) }