/*
 * 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 mediaconvert-2017-08-29.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.MediaConvert.Model
{
    /// 
    /// Specify one or more Automated ABR rule types. Note: Force include and Allowed renditions
    /// are mutually exclusive.
    /// 
    public partial class AutomatedAbrRule
    {
        private List _allowedRenditions = new List();
        private List _forceIncludeRenditions = new List();
        private MinBottomRenditionSize _minBottomRenditionSize;
        private MinTopRenditionSize _minTopRenditionSize;
        private RuleType _type;
        /// 
        /// Gets and sets the property AllowedRenditions. When customer adds the allowed renditions
        /// rule for auto ABR ladder, they are required to add at leat one rendition to allowedRenditions
        /// list
        /// 
        public List AllowedRenditions
        {
            get { return this._allowedRenditions; }
            set { this._allowedRenditions = value; }
        }
        // Check to see if AllowedRenditions property is set
        internal bool IsSetAllowedRenditions()
        {
            return this._allowedRenditions != null && this._allowedRenditions.Count > 0; 
        }
        /// 
        /// Gets and sets the property ForceIncludeRenditions. When customer adds the force include
        /// renditions rule for auto ABR ladder, they are required to add at leat one rendition
        /// to forceIncludeRenditions list
        /// 
        public List ForceIncludeRenditions
        {
            get { return this._forceIncludeRenditions; }
            set { this._forceIncludeRenditions = value; }
        }
        // Check to see if ForceIncludeRenditions property is set
        internal bool IsSetForceIncludeRenditions()
        {
            return this._forceIncludeRenditions != null && this._forceIncludeRenditions.Count > 0; 
        }
        /// 
        /// Gets and sets the property MinBottomRenditionSize. Use Min bottom rendition size to
        /// specify a minimum size for the lowest resolution in your ABR stack. * The lowest resolution
        /// in your ABR stack will be equal to or greater than the value that you enter. For example:
        /// If you specify 640x360 the lowest resolution in your ABR stack will be equal to or
        /// greater than to 640x360. * If you specify a Min top rendition size rule, the value
        /// that you specify for Min bottom rendition size must be less than, or equal to, Min
        /// top rendition size.
        /// 
        public MinBottomRenditionSize MinBottomRenditionSize
        {
            get { return this._minBottomRenditionSize; }
            set { this._minBottomRenditionSize = value; }
        }
        // Check to see if MinBottomRenditionSize property is set
        internal bool IsSetMinBottomRenditionSize()
        {
            return this._minBottomRenditionSize != null;
        }
        /// 
        /// Gets and sets the property MinTopRenditionSize. Use Min top rendition size to specify
        /// a minimum size for the highest resolution in your ABR stack. * The highest resolution
        /// in your ABR stack will be equal to or greater than the value that you enter. For example:
        /// If you specify 1280x720 the highest resolution in your ABR stack will be equal to
        /// or greater than 1280x720. * If you specify a value for Max resolution, the value that
        /// you specify for Min top rendition size must be less than, or equal to, Max resolution.
        /// 
        public MinTopRenditionSize MinTopRenditionSize
        {
            get { return this._minTopRenditionSize; }
            set { this._minTopRenditionSize = value; }
        }
        // Check to see if MinTopRenditionSize property is set
        internal bool IsSetMinTopRenditionSize()
        {
            return this._minTopRenditionSize != null;
        }
        /// 
        /// Gets and sets the property Type. Use Min top rendition size to specify a minimum size
        /// for the highest resolution in your ABR stack. * The highest resolution in your ABR
        /// stack will be equal to or greater than the value that you enter. For example: If you
        /// specify 1280x720 the highest resolution in your ABR stack will be equal to or greater
        /// than 1280x720. * If you specify a value for Max resolution, the value that you specify
        /// for Min top rendition size must be less than, or equal to, Max resolution. Use Min
        /// bottom rendition size to specify a minimum size for the lowest resolution in your
        /// ABR stack. * The lowest resolution in your ABR stack will be equal to or greater than
        /// the value that you enter. For example: If you specify 640x360 the lowest resolution
        /// in your ABR stack will be equal to or greater than to 640x360. * If you specify a
        /// Min top rendition size rule, the value that you specify for Min bottom rendition size
        /// must be less than, or equal to, Min top rendition size. Use Force include renditions
        /// to specify one or more resolutions to include your ABR stack. * (Recommended) To optimize
        /// automated ABR, specify as few resolutions as possible. * (Required) The number of
        /// resolutions that you specify must be equal to, or less than, the Max renditions setting.
        /// * If you specify a Min top rendition size rule, specify at least one resolution that
        /// is equal to, or greater than, Min top rendition size. * If you specify a Min bottom
        /// rendition size rule, only specify resolutions that are equal to, or greater than,
        /// Min bottom rendition size. * If you specify a Force include renditions rule, do not
        /// specify a separate rule for Allowed renditions. * Note: The ABR stack may include
        /// other resolutions that you do not specify here, depending on the Max renditions setting.
        /// Use Allowed renditions to specify a list of possible resolutions in your ABR stack.
        /// * (Required) The number of resolutions that you specify must be equal to, or greater
        /// than, the Max renditions setting. * MediaConvert will create an ABR stack exclusively
        /// from the list of resolutions that you specify. * Some resolutions in the Allowed renditions
        /// list may not be included, however you can force a resolution to be included by setting
        /// Required to ENABLED. * You must specify at least one resolution that is greater than
        /// or equal to any resolutions that you specify in Min top rendition size or Min bottom
        /// rendition size. * If you specify Allowed renditions, you must not specify a separate
        /// rule for Force include renditions.
        /// 
        public RuleType Type
        {
            get { return this._type; }
            set { this._type = value; }
        }
        // Check to see if Type property is set
        internal bool IsSetType()
        {
            return this._type != null;
        }
    }
}