import { useEffect, useState } from "react" import { useIntl } from "react-intl" import { dt } from "@/lib/dt" import Button from "@/components/TempDesignSystem/Button" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Footnote from "@/components/TempDesignSystem/Text/Footnote" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import styles from "./rateSummary.module.css" import type { RateSummaryProps } from "@/types/components/hotelReservation/selectRate/rateSummary" import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" export default function RateSummary({ rateSummary, isUserLoggedIn, packages, roomsAvailability, }: RateSummaryProps) { const intl = useIntl() const [isVisible, setIsVisible] = useState(false) useEffect(() => { const timer = setTimeout(() => setIsVisible(true), 0) return () => clearTimeout(timer) }, []) const { member, public: publicRate, features, roomType, priceName, } = rateSummary const priceToShow = isUserLoggedIn ? member : publicRate const isPetRoomSelected = features.some( (feature) => feature.code === RoomPackageCodeEnum.PET_ROOM ) const petRoomPackage = packages.find( (pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM ) const petRoomPrice = petRoomPackage?.localPrice.totalPrice ?? null const petRoomCurrency = petRoomPackage?.localPrice.currency ?? null const checkInDate = new Date(roomsAvailability.checkInDate) const checkOutDate = new Date(roomsAvailability.checkOutDate) const nights = dt(checkOutDate).diff(dt(checkInDate), "days") return (
{roomType} {priceName}
{priceToShow?.localPrice.pricePerStay}{" "} {priceToShow?.localPrice.currency} {intl.formatMessage({ id: "Approx." })}{" "} {priceToShow?.requestedPrice?.pricePerStay}{" "} {priceToShow?.requestedPrice?.currency}
{intl.formatMessage({ id: "Total price" })} {priceToShow?.localPrice.pricePerStay}{" "} {priceToShow?.localPrice.currency} {intl.formatMessage( { id: "booking.nights" }, { totalNights: nights } )} ,{" "} {intl.formatMessage( { id: "booking.adults" }, { totalAdults: roomsAvailability.occupancy?.adults } )} {roomsAvailability.occupancy?.children?.length && ( <> ,{" "} {intl.formatMessage( { id: "booking.children" }, { totalChildren: roomsAvailability.occupancy.children.length } )} )}
{isPetRoomSelected && (
+ {petRoomPrice} {petRoomCurrency} {intl.formatMessage({ id: "Pet charge" })}
)}
) }