import type { z } from "zod"

import type {
  enterDetailsRoomsAvailabilityInputSchema,
  getHotelsByHotelIdsAvailabilityInputSchema,
  hotelsAvailabilityInputSchema,
  selectRateRoomsAvailabilityInputSchema,
} from "@/server/routers/hotels/input"
import type { hotelsAvailabilitySchema } from "@/server/routers/hotels/output"
import type { productTypeSchema } from "@/server/routers/hotels/schemas/availability/productType"
import type {
  productTypeCorporateChequeSchema,
  productTypePointsSchema,
  productTypePriceSchema,
  productTypeVoucherSchema,
} from "@/server/routers/hotels/schemas/productTypePrice"

export type HotelsAvailability = z.output<typeof hotelsAvailabilitySchema>
export type HotelsAvailabilityInputSchema = z.output<
  typeof hotelsAvailabilityInputSchema
>
export type HotelsByHotelIdsAvailabilityInputSchema = z.output<
  typeof getHotelsByHotelIdsAvailabilityInputSchema
>
export type RoomsAvailabilityInputSchema = z.input<
  typeof selectRateRoomsAvailabilityInputSchema
>
export type RoomsAvailabilityOutputSchema = z.output<
  typeof selectRateRoomsAvailabilityInputSchema
>
export type RoomsAvailabilityInputRoom =
  RoomsAvailabilityInputSchema["booking"]["rooms"][number]
export type RoomsAvailabilityExtendedInputSchema = z.input<
  typeof enterDetailsRoomsAvailabilityInputSchema
>

export type ProductType = z.output<typeof productTypeSchema>
export type ProductTypePrices = z.output<typeof productTypePriceSchema>
export type ProductTypePoints = z.output<typeof productTypePointsSchema>
export type ProductTypeVoucher = z.output<typeof productTypeVoucherSchema>
export type ProductTypeCheque = z.output<
  typeof productTypeCorporateChequeSchema
>

export type HotelsAvailabilityItem =
  HotelsAvailability["data"][number]["attributes"]
