import type { z } from "zod"

import type { roomsAvailabilitySchema } from "@/server/routers/hotels/output"
import type { roomConfigurationSchema } from "@/server/routers/hotels/schemas/roomAvailability/configuration"
import type {
  corporateChequeProduct,
  priceProduct,
  productSchema,
  redemptionProduct,
  redemptionsProduct,
  voucherProduct,
} from "@/server/routers/hotels/schemas/roomAvailability/product"
import type { rateDefinitionSchema } from "@/server/routers/hotels/schemas/roomAvailability/rateDefinition"

export type CorporateChequeProduct = z.output<typeof corporateChequeProduct>
export type PriceProduct = z.output<typeof priceProduct>
export type RedemptionProduct = z.output<typeof redemptionProduct>
export type RedemptionsProduct = z.output<typeof redemptionsProduct>
export type VoucherProduct = z.output<typeof voucherProduct>

export type CodeProduct = CorporateChequeProduct | PriceProduct | VoucherProduct
export type Products = z.output<typeof productSchema>
export type Product =
  | CorporateChequeProduct
  | PriceProduct
  | RedemptionProduct
  | VoucherProduct

export type RateDefinition = z.output<typeof rateDefinitionSchema>
export type RoomConfiguration = z.output<typeof roomConfigurationSchema>
export type RoomsAvailability = z.output<typeof roomsAvailabilitySchema>
