"use client" import { useRef } from "react" import { useIntl } from "react-intl" import { CurrencyEnum } from "@scandic-hotels/common/constants/currency" import { createBookingConfirmationStore } from "@/stores/booking-confirmation" import { BookingConfirmationContext } from "@/contexts/BookingConfirmation" import { formatPrice } from "@scandic-hotels/common/utils/numberFormatting" import type { BookingConfirmationStore } from "@/types/contexts/booking-confirmation" import type { BookingConfirmationProviderProps } from "@/types/providers/booking-confirmation" export default function BookingConfirmationProvider({ bookingCode, children, currencyCode, fromDate, toDate, roomCategories, rooms, vat, }: BookingConfirmationProviderProps) { const intl = useIntl() const storeRef = useRef(undefined) if (!storeRef.current) { const totalBookingPrice = rooms.reduce((acc, room) => { const reservationTotalPrice = room?.totalPrice || 0 return acc + reservationTotalPrice }, 0) let formattedTotalCost = formatPrice(intl, totalBookingPrice, currencyCode) const totalBookingPoints = rooms.reduce((acc, room) => { return acc + (room?.roomPoints ?? 0) }, 0) const totalBookingCheques = rooms.reduce((acc, room) => { return acc + (room?.cheques ?? 0) }, 0) const totalBookingVouchers = rooms.reduce((acc, room) => { return acc + (room?.vouchers ?? 0) }, 0) let isVatCurrency = true if (totalBookingPoints) { isVatCurrency = false formattedTotalCost = formatPrice( intl, totalBookingPoints, CurrencyEnum.POINTS, totalBookingPrice, currencyCode ) } else if (totalBookingCheques) { isVatCurrency = false formattedTotalCost = formatPrice( intl, totalBookingCheques, CurrencyEnum.CC, totalBookingPrice, currencyCode ) } else if (totalBookingVouchers) { const room = rooms?.[0] const voucherCurrency = intl.formatMessage({ defaultMessage: "Voucher" }) if (room?.packages) { const pkgsSum = room.packages.reduce( (total, pkg) => total + pkg.totalPrice, 0 ) const currency = room.packages.find((pkg) => pkg.currency)?.currency isVatCurrency = false formattedTotalCost = formatPrice( intl, totalBookingVouchers, voucherCurrency, pkgsSum, currency ) } else { isVatCurrency = false formattedTotalCost = formatPrice( intl, totalBookingVouchers, voucherCurrency ) } } const initialData = { bookingCode, currencyCode, fromDate, toDate, roomCategories, rooms, vat, isVatCurrency, formattedTotalCost, totalBookingPrice, totalBookingCheques, } storeRef.current = createBookingConfirmationStore(initialData) } return ( {children} ) }