import { getIntl } from "@/i18n" import { truncateTextAfterLastPeriod } from "../truncate" import type { RawMetadataSchema } from "@scandic-hotels/trpc/routers/contentstack/metadata/output" function getSubpageDescription( subpageUrl: string, additionalHotelData: RawMetadataSchema["additionalHotelData"], hotelRestaurants: RawMetadataSchema["hotelRestaurants"] ) { const restaurantSubPage = hotelRestaurants?.find( (restaurant) => restaurant.nameInUrl === subpageUrl ) if (restaurantSubPage?.elevatorPitch) { return restaurantSubPage.elevatorPitch } if (!additionalHotelData) { return null } switch (subpageUrl) { case additionalHotelData.hotelParking.nameInUrl: return additionalHotelData.hotelParking.elevatorPitch case additionalHotelData.healthAndFitness.nameInUrl: return additionalHotelData.healthAndFitness.elevatorPitch case additionalHotelData.hotelSpecialNeeds.nameInUrl: return additionalHotelData.hotelSpecialNeeds.elevatorPitch case additionalHotelData.meetingRooms.nameInUrl: return additionalHotelData.meetingRooms.elevatorPitch default: return null } } export async function getHotelPageDescription(data: RawMetadataSchema) { const intl = await getIntl() const { subpageUrl, hotelData, additionalHotelData, hotelRestaurants } = data if (!hotelData) { return null } if (subpageUrl) { const subpageDescription = getSubpageDescription( subpageUrl, additionalHotelData, hotelRestaurants ) if (subpageDescription) { return truncateTextAfterLastPeriod(subpageDescription) } } const hotelName = hotelData.name const location = hotelData.translatedCityName const amenities = hotelData.detailedFacilities if (amenities.length < 4) { return intl.formatMessage( { defaultMessage: "{hotelName} in {location}. Book your stay now!" }, { hotelName, location } ) } const hotelDescription = intl.formatMessage( { defaultMessage: "{hotelName} in {location} offers {amenity1} and {amenity2}. Guests can also enjoy {amenity3} and {amenity4}. Book your stay at {hotelName} today!", }, { hotelName, location, amenity1: amenities[0].name, amenity2: amenities[1].name, amenity3: amenities[2].name, amenity4: amenities[3].name, } ) const shortHotelDescription = intl.formatMessage( { defaultMessage: "{hotelName} in {location} offers {amenity1} and {amenity2}. Guests can also enjoy {amenity3} and {amenity4}.", }, { hotelName, location, amenity1: amenities[0].name, amenity2: amenities[1].name, amenity3: amenities[2].name, amenity4: amenities[3].name, } ) if (hotelDescription.length > 160) { if (shortHotelDescription.length > 160) { return truncateTextAfterLastPeriod(shortHotelDescription) } return shortHotelDescription } else { return hotelDescription } }