import { notFound } from "next/navigation" import { env } from "@/env/server" import { getCityCoordinates } from "@/lib/trpc/memoizedRequests" import TrackingSDK from "@/components/TrackingSDK" import { getLang } from "@/i18n/serverContext" import { getHotelSearchDetails } from "@/utils/hotelSearchDetails" import { safeTry } from "@/utils/safeTry" import { getHotelPins } from "../../HotelCardDialogListing/utils" import { getFiltersFromHotels, getHotels } from "../helpers" import { getTracking } from "./tracking" import SelectHotelMap from "." import type { SelectHotelMapContainerProps } from "@/types/components/hotelReservation/selectHotel/map" import type { SelectHotelSearchParams } from "@/types/components/hotelReservation/selectHotel/selectHotelSearchParams" import { RateTypeEnum } from "@/types/enums/rateType" export async function SelectHotelMapContainer({ searchParams, isAlternativeHotels, }: SelectHotelMapContainerProps) { const lang = getLang() const googleMapId = env.GOOGLE_DYNAMIC_MAP_ID const googleMapsApiKey = env.GOOGLE_STATIC_MAP_KEY const getHotelSearchDetailsPromise = safeTry( getHotelSearchDetails( { searchParams: searchParams as SelectHotelSearchParams & { [key: string]: string }, }, isAlternativeHotels ) ) const [searchDetails] = await getHotelSearchDetailsPromise if (!searchDetails) { return notFound() } const { adultsInRoom, bookingCode, childrenInRoom, city, hotel: isAlternativeFor, noOfRooms, redemption, selectHotelParams, } = searchDetails if (!city) { return notFound() } const hotels = await getHotels( selectHotelParams, isAlternativeFor, bookingCode, city, !!redemption ) const hotelPins = getHotelPins(hotels) const filterList = getFiltersFromHotels(hotels) const cityCoordinates = await getCityCoordinates({ city: city.name, hotel: { address: hotels?.[0]?.hotel?.address.streetAddress }, }) const arrivalDate = new Date(selectHotelParams.fromDate) const departureDate = new Date(selectHotelParams.toDate) const isRedemptionAvailability = redemption ? hotels.some( (hotel) => hotel.availability.productType?.redemptions?.length ) : false const isBookingCodeRateAvailable = bookingCode ? hotels?.some( (hotel) => hotel.availability.productType?.public?.rateType !== RateTypeEnum.Regular ) : false const { hotelsTrackingData, pageTrackingData } = getTracking( lang, !!isAlternativeFor, !!isAlternativeHotels, arrivalDate, departureDate, adultsInRoom, childrenInRoom, hotels.length, selectHotelParams.hotelId, noOfRooms, hotels?.[0]?.hotel.address.country, hotels?.[0]?.hotel.address.city, selectHotelParams.city, bookingCode, isBookingCodeRateAvailable, redemption, isRedemptionAvailability ) return ( <> ) }