/**
  * Interface for Pals Request Payload Options model
  */
export interface IPalsRequestPayloadOptions {
    languageCode: string;
    roomCount: number;
    adults: number;
    infants: number;
    children: number;
    dateIn: string;
    dateOut: string;
    sortOrderPreference: string;
    includeUnavailable: boolean;
    ratePlanType?: string;
    reservationCode?: number;
    accessCodes?: IAccessCode[];
    productId?: number;
    roomTypeId?: number;
    loyaltyTierId?: number;
    childAges?: number[];
    roomSequenceNumber?: any;
    bookerIdentifier?: string;
    partnerIdentifier?: string;
    groupCode?: string;
    promotionId?: number;
    includeMemberRate?: boolean;
}
/**
 * Defines pals payload object.
 */
export interface IPalsPayload {
    excludeNightlyRates?: boolean;
    languageCode?: string;
    reservationCode?: number;
    roomStay: IPalsPayloadRoomStayData;
    accessCodes?: IAccessCode[];
    tpaExtension?: ITpaExtension[];
    bookerIdentifier?: string;
    partnerIdentifier?: string;
    includeMemberRate?: boolean;
    disableLocaitonSharing?: boolean;
    currencyCode?: string;
    includeNightlyRates?: boolean;
    promotionId?: number;
}
/**
* Interface for Hotel Lead Member Rate Plan
*/
export interface ILeadMemberRate {
    memberRate: number;
    roomtypeId: number;
    memberDiscount: number;
}
/**
 * Defines pals payload room stay model.
 */
export interface IPalsPayloadRoomStayData {
    endDate: string;
    guestCount: IPalsPayloadGuestCount;
    nights?: number;
    productSearchCriteria?: IProductSearchCriteria;
    roomQuantity: number;
    startDate: string;
}
/**
 * Defines pals payload Product Search Criteria model
 */
export interface IProductSearchCriteria {
    type?: string;
    includeUnavailable: boolean;
    sortingPreference: string;
    productId?: number;
    roomTypeId?: number;
}
/**
 * Defines pals payload Rate Search Criteria Room RateCode model
 */
export interface IRoomRateCode {
    code: string;
    codeType: string;
}
/**
 * Defines pals payload guest details model
 */
export interface IPalsPayloadGuestCount {
    adults: number;
    infants: number;
    children: IPalsSelectedChild;
}
/**
 * Defines pals payload children details model
 */
export interface IPalsSelectedChild {
    ages?: number[];
    count: number;
}
/**
 * Pals API Response Structure
 */
export interface IPalsResponse {
    hotelCode: number;
    roomStays: IHotelRoomStays[];
    isAvailable: boolean;
    promotionApplied?: boolean;
}
/**
 * Pals Response - Hotel Room Stays
 */
export interface IHotelRoomStays {
    packageTypes?: IPalsPackageType[];
    roomtypes: IPalsRoomType[];
    rateplans?: IPalsRatePlan[];
}
/**
 * Pals Response - Interface for Hotel Rate Plan
 */
export interface IPalsRatePlan {
    rateplanId: number;
    ratePlanName: string;
    type: string;
    leadRate: ILeadRate;
    sortOrder: number;
    isConfidential: boolean;
    isAvailable: boolean;
    cancellationPolicy: ICancellationPolicy;
    guaranteePolicy: IGuaranteePolicy;
    isDefalut: boolean;
    roomTypes: IRoomTypesPerRateplan[];
    leadMemberRate?: ILeadMemberRate;
}
/**
 * Pals Response - Rate Plan Cancellation Policy
 */
export interface IRoomTypesPerRateplan {
    isAvailable: boolean;
    roomName: string;
    roomtypeId: number;
    sortOrder: number;
}
/**
* Interface for Hotel Lead Rate Plan
*/
export interface ILeadRate {
    rate: number;
    roomtypeId: number;
    discount: number;
}
/**
* Interface for Hotel Lead Member Rate Plan
*/
export interface ILeadMemberRate {
    memberRate: number;
    roomtypeId: number;
    memberDiscount: number;
}
/**
 * Pals Response - Interface for Rate Plan Cancellation Policy
 */
export interface ICancellationPolicy {
    nonRefundable: boolean;
    description: string;
    cancellationDeadlines: ICancellationDeadline[];
    sameDayCancellations: ISameDayCancellation;
    advancedNoticeCancellations: IAdvancedNoticeCancellation;
    merchandiseAsFreeCancellation: boolean;
}
export interface ISameDayCancellation {
    sameDayCancellation: boolean;
    remainingCancellationHours: number;
}
export interface IAdvancedNoticeCancellation {
    remainingDays: number;
    remainingHours: number;
    isAdvancedNoticeCancellation: boolean;
}
/**
 * Pals Response -  Interface for Rate Plan Cancellation Deadline
 */
export interface ICancellationDeadline {
    checkInDate: string;
    deadLineDate: string;
    deadLineHour: number;
    deadLineDurationHours: number;
}
/**
 * Pals Response - Interface for Rate Plan Guarantee Policy
 */
export interface IGuaranteePolicy {
    policyType: string;
    description: string;
    acceptTender: string;
    isInstallmentEnabled?: boolean;
}
/**
 * Pals Response - Hotel Package
 */
export interface IPalsPackageType {
    packageId: number;
    packageName: string;
    sortOrder: number;
    isAvailable: boolean;
    roomTypes: IRoomTypesPerRateplan[];
    leadRate: ILeadRate;
    leadMemberRate?: ILeadMemberRate;
    cancellationPolicy: ICancellationPolicy;
    guaranteePolicy: IGuaranteePolicy;
    inclusions: IPackageInclusion[];
    isAbstract?: boolean;
    nightlyInclusionsTaxTotal?: number;
}
/**
 * Defines package inclusions object for each package Type
 */
export interface IPackageInclusion {
    name: string;
    description: string;
    sortOrder: number;
    id: number;
    pricingType: string;
    options: IPackageInclusionOptions[];
}
/**
 * Defines package inclusion Options
 */
export interface IPackageInclusionOptions {
    dailyRates: IPackageInclusionDailyRates[];
    description: string;
    id: number;
    name: string;
    sortOrder: number;
}
/**
 * Defines package inclusions daily rates
 */
export interface IPackageInclusionDailyRates {
    adultUnitPrice: number;
    amountAfterTax: number;
    amountBeforeTax: number;
    childUnitPrice: number;
    date: string;
    discount: number;
    taxAmount: number;
}
/**
 * Pals Response -PackageType cancellation Policy model
 */
export interface ICancellationPolicy {
    cancellationDeadlines: ICancellationDeadlines[];
    description: string;
    nonRefundable: boolean;
}
/**
 * Pals Response -Package Type Cancellation Deadlines model
 */
export interface ICancellationDeadlines {
    checkInDate: string;
    deadLineDate: string;
    deadLineHour: number;
    deadLineDurationHours: number;
}
/**
 * Pals Response -PackageType Guarantee Policy  model
 */
export interface IGuaranteePolicy {
    acceptTender: string;
    description: string;
    policyType: string;
}
/**
 * Pals Response -Package Type Lead Rates  model
 */
export interface IPackageTypeLeadRates {
    discount: number;
    rate: number;
    roomtypeId: number;
}
/**
 * Pals Response - Pals Room Type
 */
export interface IPalsRoomType {
    isAvailable: boolean;
    roomName: string;
    roomtypeId: number;
    sortOrder: number;
    products: IProducts[];
    quantityRemaining?: string;
}
/**
 * Pals Response - Hotel Products
 */
export interface IProducts {
    productId: number;
    isAvailable: boolean;
    nightlyRates: IHotelNightlyRate[];
    restrictionSummaries?: string[];
    total: IHotelTotal;
    averageDailyRate: number;
    discountedAverageDailyRate: number;
    promoInfo?: IPromoInfo;
    type: string;
    roomUpgradeOptions?: IProductRoomUpgradeOption[];
    productRateCode?: number;
    merchandisedCurrency?: string;
    quantityRemaining?: string;
    memberRate?: boolean;
    memberTotal?: IHotelTotal;
    memberPromoInfo?: IPromoInfo;
    averageDailyMemberRate?: number;
    discountedAverageDailyMemberRate?: number;
    memberNightlyRates?: IHotelNightlyRate[];
    isAbstract?: boolean;
}
/**
 * Pals Response - promo info
 */
export interface IPromoInfo {
    discountType: string;
    enablePromoBanner: boolean;
    enableStrikeThrough: boolean;
    expiresInSeconds: number;
    geoPricingPromotion: boolean;
    merchandisedPromotion: IMerchandisedPromotion;
    numberOfNightsFree: number;
    numberOfNightsToDiscount: number;
    numberOfNightsToPurchase: number;
    promotionId: number;
    promotionName: string;
    promotionPercentageDiscount: number;
    xNightsDiscount: number;
    xNightsDiscountType: string;
    memberRateTransparent?: boolean;
}
/**
 * Pals Response - Merchandised Promotion
 */
export interface IMerchandisedPromotion {
    labelText: string;
    replaceRateplanName: string;
    saleText: string;
    termsAndConditions: string;
    valueAddedText: string;
}
/**
 * Pals Response - Room Upgrade Options
 */
export interface IProductRoomUpgradeOption {
    roomTypeId: number;
    sortOrder: number;
}
/**
 * Pals Response - Hotel Nightly Rate
 */
export interface IHotelNightlyRate {
    isAvailable: boolean;
    date: string;
    amountBeforeTax: number;
    amountTotal: number;
    discount: number;
    totalTax: number;
    inventoryCount: number;
    propertyLevelInv: number;
    totalExclusiveTaxes?: number;
    totalInclusiveTaxes?: number;
    totalResortFeeExclusive?: number;
    totalResortFeeInclusive?: number;
    totalServiceChargeExclusive?: number;
    totalServiceChargeInclusive?: number;
}
/**
 * Pals Response - Room Rate Hotel Total
 */
export interface IHotelTotal {
    amountAfterTaxRoom: number;
    amountBeforeTaxRoom: number;
    amountBeforeTaxServ: number;
    discountRoom: number;
    grossRoomAmountBeforeTax: number;
    grossAmountBeforeTaxServ: number;
    taxAmountTotal: number;
    taxAmountTotalServ: number;
    grossAmountBeforeTax: number;
}
/**
 * Pals Response - Hotel Room type per Rate Plan
 */
export interface IRoomTypesPerRateplan {
    isAvailable: boolean;
    roomName: string;
    roomtypeId: number;
    sortOrder: number;
}
/**
 * Pals Response - Hotel Rate Plan lead rate
 */
export interface ILeadRate {
    rate: number;
    roomtypeId: number;
    discount: number;
}
/**
 * Pals Response Rate Plan Cancellation Deadline
 */
export interface IPackageTypeCancellationDeadline {
    checkInDate: string;
    deadLineDate: string;
    deadLineHour: number;
    deadLineDurationHours: number;
}
/**
 * Pals payload access code model
 */
export interface IAccessCode {
    code: string;
    type: string;
}
/**
 * Pals payload tpaExtension model
 */
export interface ITpaExtension {
    name: string;
    value: string;
}
