import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" import type { Rate, RateCode, } from "@/types/components/hotelReservation/selectRate/selectRate" import type { RateSummaryParams } from "./rate-selection" interface CalculateRoomSummaryParams extends RateSummaryParams { selectedRate: RateCode roomIndex: number } export function calculateRoomSummary({ selectedRate, roomIndex, getFilteredRooms, availablePackages, roomCategories, selectedPackagesByRoom, }: CalculateRoomSummaryParams): Rate | null { const filteredRooms = getFilteredRooms(roomIndex) const selectedPackages = selectedPackagesByRoom[roomIndex] || [] const room = filteredRooms.find( (room) => room.roomTypeCode === selectedRate.roomTypeCode ) if (!room) return null const product = room.products.find( (product) => product.productType.public.rateCode === selectedRate.publicRateCode ) if (!product) return null const petRoomPackage = selectedPackages.includes(RoomPackageCodeEnum.PET_ROOM) ? availablePackages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM) : undefined const features = filteredRooms.find((room) => room.features.some( (feature) => feature.code === RoomPackageCodeEnum.PET_ROOM ) )?.features const roomType = roomCategories.find((roomCategory) => roomCategory.roomTypes.some((type) => type.code === room.roomTypeCode) ) return { features: petRoomPackage && features ? features : [], priceName: selectedRate.name, priceTerm: selectedRate.paymentTerm, public: product.productType.public, member: product.productType.member, roomType: roomType?.name ?? room.roomType, roomTypeCode: room.roomTypeCode, } }