/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the ec2-2016-11-15.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.EC2.Model
{
    /// 
    /// Container for the parameters to the DescribeReservedInstancesOfferings operation.
    /// Describes Reserved Instance offerings that are available for purchase. With Reserved
    /// Instances, you purchase the right to launch instances for a period of time. During
    /// that time period, you do not receive insufficient capacity errors, and you pay a lower
    /// usage rate than the rate charged for On-Demand instances for the actual time used.
    /// 
    ///  
    /// 
    /// If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace,
    /// they will be excluded from these results. This is to ensure that you do not purchase
    /// your own Reserved Instances.
    /// 
    ///  
    /// 
    /// For more information, see Reserved
    /// Instance Marketplace in the Amazon EC2 User Guide.
    /// 
    /// 
    public partial class DescribeReservedInstancesOfferingsRequest : AmazonEC2Request
    {
        private string _availabilityZone;
        private List _filters = new List();
        private bool? _includeMarketplace;
        private Tenancy _instanceTenancy;
        private InstanceType _instanceType;
        private long? _maxDuration;
        private int? _maxInstanceCount;
        private int? _maxResults;
        private long? _minDuration;
        private string _nextToken;
        private OfferingClassType _offeringClass;
        private OfferingTypeValues _offeringType;
        private RIProductDescription _productDescription;
        private List _reservedInstancesOfferingIds = new List();
        /// 
        /// Gets and sets the property AvailabilityZone. 
        /// 
        /// The Availability Zone in which the Reserved Instance can be used.
        /// 
        /// 
        public string AvailabilityZone
        {
            get { return this._availabilityZone; }
            set { this._availabilityZone = value; }
        }
        // Check to see if AvailabilityZone property is set
        internal bool IsSetAvailabilityZone()
        {
            return this._availabilityZone != null;
        }
        /// 
        /// Gets and sets the property Filters. 
        /// 
        /// One or more filters.
        /// 
        ///   -  
        /// 
        ///  availability-zone- The Availability Zone where the Reserved Instance
        /// can be used.
        /// 
        ///
-  
        /// 
        ///  duration- The duration of the Reserved Instance (for example, one year
        /// or three years), in seconds (31536000|94608000).
        /// 
        ///
-  
        /// 
        ///  fixed-price- The purchase price of the Reserved Instance (for example,
        /// 9800.0).
        /// 
        ///
-  
        /// 
        ///  instance-type- The instance type that is covered by the reservation.
        /// 
        ///
-  
        /// 
        ///  marketplace- Set totrueto show only Reserved Instance
        /// Marketplace offerings. When this filter is not used, which is the default behavior,
        /// all offerings from both Amazon Web Services and the Reserved Instance Marketplace
        /// are listed.
        /// 
        ///
-  
        /// 
        ///  product-description- The Reserved Instance product platform description
        /// (Linux/UNIX|Linux with SQL Server Standard|Linux
        /// with SQL Server Web|Linux with SQL Server Enterprise|SUSE
        /// Linux|Red Hat Enterprise Linux|Red Hat Enterprise Linux
        /// with HA|Windows|Windows with SQL Server Standard/// |Windows with SQL Server Web|Windows with SQL Server Enterprise).
        /// 
        ///
-  
        /// 
        ///  reserved-instances-offering-id- The Reserved Instances offering ID.
        /// 
        ///
-  
        /// 
        ///  scope- The scope of the Reserved Instance (Availability Zone/// orRegion).
        /// 
        ///
-  
        /// 
        ///  usage-price- The usage price of the Reserved Instance, per hour (for
        /// example, 0.84).
        /// 
        ///
/// 
        public List Filters
        {
            get { return this._filters; }
            set { this._filters = value; }
        }
        // Check to see if Filters property is set
        internal bool IsSetFilters()
        {
            return this._filters != null && this._filters.Count > 0; 
        }
        /// 
        /// Gets and sets the property IncludeMarketplace. 
        /// 
        /// Include Reserved Instance Marketplace offerings in the response.
        /// 
        /// 
        public bool IncludeMarketplace
        {
            get { return this._includeMarketplace.GetValueOrDefault(); }
            set { this._includeMarketplace = value; }
        }
        // Check to see if IncludeMarketplace property is set
        internal bool IsSetIncludeMarketplace()
        {
            return this._includeMarketplace.HasValue; 
        }
        /// 
        /// Gets and sets the property InstanceTenancy. 
        /// 
        /// The tenancy of the instances covered by the reservation. A Reserved Instance with
        /// a tenancy ofdedicated is applied to instances that run in a VPC on single-tenant
        /// hardware (i.e., Dedicated Instances).
        /// 
        ///  
        /// 
        ///  Important: The host value cannot be used with this parameter.
        /// Use the default or dedicated values only.
        /// 
        ///  
        /// 
        /// Default: default 
        /// 
        /// 
        public Tenancy InstanceTenancy
        {
            get { return this._instanceTenancy; }
            set { this._instanceTenancy = value; }
        }
        // Check to see if InstanceTenancy property is set
        internal bool IsSetInstanceTenancy()
        {
            return this._instanceTenancy != null;
        }
        /// 
        /// Gets and sets the property InstanceType. 
        /// 
        /// The instance type that the reservation will cover (for example, m1.small).
        /// For more information, see Instance
        /// types in the Amazon EC2 User Guide.
        /// 
        /// 
        public InstanceType InstanceType
        {
            get { return this._instanceType; }
            set { this._instanceType = value; }
        }
        // Check to see if InstanceType property is set
        internal bool IsSetInstanceType()
        {
            return this._instanceType != null;
        }
        /// 
        /// Gets and sets the property MaxDuration. 
        /// 
        /// The maximum duration (in seconds) to filter when searching for offerings.
        /// 
        ///  
        /// 
        /// Default: 94608000 (3 years)
        /// 
        /// 
        public long MaxDuration
        {
            get { return this._maxDuration.GetValueOrDefault(); }
            set { this._maxDuration = value; }
        }
        // Check to see if MaxDuration property is set
        internal bool IsSetMaxDuration()
        {
            return this._maxDuration.HasValue; 
        }
        /// 
        /// Gets and sets the property MaxInstanceCount. 
        /// 
        /// The maximum number of instances to filter when searching for offerings.
        /// 
        ///  
        /// 
        /// Default: 20
        /// 
        /// 
        public int MaxInstanceCount
        {
            get { return this._maxInstanceCount.GetValueOrDefault(); }
            set { this._maxInstanceCount = value; }
        }
        // Check to see if MaxInstanceCount property is set
        internal bool IsSetMaxInstanceCount()
        {
            return this._maxInstanceCount.HasValue; 
        }
        /// 
        /// Gets and sets the property MaxResults. 
        /// 
        /// The maximum number of results to return for the request in a single page. The remaining
        /// results of the initial request can be seen by sending another request with the returned
        /// NextToken value. The maximum is 100.
        /// 
        ///  
        /// 
        /// Default: 100
        /// 
        /// 
        public int MaxResults
        {
            get { return this._maxResults.GetValueOrDefault(); }
            set { this._maxResults = value; }
        }
        // Check to see if MaxResults property is set
        internal bool IsSetMaxResults()
        {
            return this._maxResults.HasValue; 
        }
        /// 
        /// Gets and sets the property MinDuration. 
        /// 
        /// The minimum duration (in seconds) to filter when searching for offerings.
        /// 
        ///  
        /// 
        /// Default: 2592000 (1 month)
        /// 
        /// 
        public long MinDuration
        {
            get { return this._minDuration.GetValueOrDefault(); }
            set { this._minDuration = value; }
        }
        // Check to see if MinDuration property is set
        internal bool IsSetMinDuration()
        {
            return this._minDuration.HasValue; 
        }
        /// 
        /// Gets and sets the property NextToken. 
        /// 
        /// The token to retrieve the next page of results.
        /// 
        /// 
        public string NextToken
        {
            get { return this._nextToken; }
            set { this._nextToken = value; }
        }
        // Check to see if NextToken property is set
        internal bool IsSetNextToken()
        {
            return this._nextToken != null;
        }
        /// 
        /// Gets and sets the property OfferingClass. 
        /// 
        /// The offering class of the Reserved Instance. Can be standard or convertible.
        /// 
        /// 
        public OfferingClassType OfferingClass
        {
            get { return this._offeringClass; }
            set { this._offeringClass = value; }
        }
        // Check to see if OfferingClass property is set
        internal bool IsSetOfferingClass()
        {
            return this._offeringClass != null;
        }
        /// 
        /// Gets and sets the property OfferingType. 
        /// 
        /// The Reserved Instance offering type. If you are using tools that predate the 2011-11-01
        /// API version, you only have access to the Medium Utilization Reserved
        /// Instance offering type. 
        /// 
        /// 
        public OfferingTypeValues OfferingType
        {
            get { return this._offeringType; }
            set { this._offeringType = value; }
        }
        // Check to see if OfferingType property is set
        internal bool IsSetOfferingType()
        {
            return this._offeringType != null;
        }
        /// 
        /// Gets and sets the property ProductDescription. 
        /// 
        /// The Reserved Instance product platform description. Instances that include (Amazon
        /// VPC) in the description are for use with Amazon VPC.
        /// 
        /// 
        public RIProductDescription ProductDescription
        {
            get { return this._productDescription; }
            set { this._productDescription = value; }
        }
        // Check to see if ProductDescription property is set
        internal bool IsSetProductDescription()
        {
            return this._productDescription != null;
        }
        /// 
        /// Gets and sets the property ReservedInstancesOfferingIds. 
        /// 
        /// One or more Reserved Instances offering IDs.
        /// 
        /// 
        public List ReservedInstancesOfferingIds
        {
            get { return this._reservedInstancesOfferingIds; }
            set { this._reservedInstancesOfferingIds = value; }
        }
        // Check to see if ReservedInstancesOfferingIds property is set
        internal bool IsSetReservedInstancesOfferingIds()
        {
            return this._reservedInstancesOfferingIds != null && this._reservedInstancesOfferingIds.Count > 0; 
        }
    }
}