import dayjs from "dayjs" import { z } from "zod" import { Lang } from "@scandic-hotels/common/constants/language" import { baseBookingSchema, selectRoomSchema } from "../../../input" export type RoomsAvailabilityInputRoom = RoomsAvailabilityInputSchema["booking"]["rooms"][number] export type RoomsAvailabilityOutputSchema = z.output< typeof selectRateRoomsAvailabilityInputSchema > export type RoomsAvailabilityInputSchema = z.input< typeof selectRateRoomsAvailabilityInputSchema > export const selectRateRoomsAvailabilityInputSchema = z .object({ booking: baseBookingSchema.extend({ rooms: z.array(selectRoomSchema), }), lang: z.nativeEnum(Lang), }) .refine( (data) => { const fromDate = dayjs(data.booking.fromDate) return fromDate.isValid() }, { message: "FROMDATE_INVALID", } ) .refine( (data) => { const toDate = dayjs(data.booking.toDate) return toDate.isValid() }, { message: "TODATE_INVALID", } ) .refine( (data) => { const fromDate = dayjs(data.booking.fromDate).startOf("day") const toDate = dayjs(data.booking.toDate).startOf("day") return fromDate.isBefore(toDate) }, { message: "TODATE_MUST_BE_AFTER_FROMDATE", } ) .refine( (data) => { const fromDate = dayjs(data.booking.fromDate) const today = dayjs().startOf("day") return fromDate.isSameOrAfter(today) }, { message: "FROMDATE_CANNOT_BE_IN_THE_PAST", } )