/*
 * 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.
 */
using Amazon.Runtime;
using System;
using System.Collections.Generic;
using System.Text;

namespace Amazon.S3.Model
{
    /// <summary>
    /// Container for the parameters to the PutBucketIntelligentTieringConfiguration operation.
    /// Puts a S3 Intelligent-Tiering configuration to the specified bucket. You can have
    /// up to 1,000 S3 Intelligent-Tiering configurations per bucket.
    /// 
    ///  
    /// <para>
    /// The S3 Intelligent-Tiering storage class is designed to optimize storage costs by
    /// automatically moving data to the most cost-effective storage access tier, without
    /// performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic
    /// cost savings in three low latency and high throughput access tiers. To get the lowest
    /// storage cost on data that can be accessed in minutes to hours, you can choose to activate
    /// additional archiving capabilities.
    /// </para>
    ///  
    /// <para>
    /// The S3 Intelligent-Tiering storage class is the ideal storage class for data with
    /// unknown, changing, or unpredictable access patterns, independent of object size or
    /// retention period. If the size of an object is less than 128 KB, it is not monitored
    /// and not eligible for auto-tiering. Smaller objects can be stored, but they are always
    /// charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.
    /// </para>
    ///  
    /// <para>
    /// For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access">Storage
    /// class for automatically optimizing frequently and infrequently accessed objects</a>.
    /// </para>
    ///  
    /// <para>
    /// Operations related to <code>PutBucketIntelligentTieringConfiguration</code> include:
    /// 
    /// </para>
    ///  <ul> <li> 
    /// <para>
    ///  <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html">DeleteBucketIntelligentTieringConfiguration</a>
    /// 
    /// </para>
    ///  </li> <li> 
    /// <para>
    ///  <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html">GetBucketIntelligentTieringConfiguration</a>
    /// 
    /// </para>
    ///  </li> <li> 
    /// <para>
    ///  <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html">ListBucketIntelligentTieringConfigurations</a>
    /// 
    /// </para>
    ///  </li> </ul> <note> 
    /// <para>
    /// You only need S3 Intelligent-Tiering enabled on a bucket if you want to automatically
    /// move objects stored in the S3 Intelligent-Tiering storage class to the Archive Access
    /// or Deep Archive Access tier.
    /// </para>
    ///  </note> 
    /// <para>
    ///  <code>PutBucketIntelligentTieringConfiguration</code> has the following special errors:
    /// </para>
    ///  <dl> <dt>HTTP 400 Bad Request Error</dt> <dd> 
    /// <para>
    ///  <i>Code:</i> InvalidArgument
    /// </para>
    /// <para>
    ///  <i>Cause:</i> Invalid Argument
    /// </para>
    ///  </dd> <dt>HTTP 400 Bad Request Error</dt> <dd> 
    /// <para>
    ///  <i>Code:</i> TooManyConfigurations
    /// </para>
    /// <para>
    ///  <i>Cause:</i> You are attempting to create a new configuration but have already reached
    /// the 1,000-configuration limit. 
    /// </para>
    ///  </dd> <dt>HTTP 403 Forbidden Error</dt> <dd> 
    /// <para>
    ///  <i>Cause:</i> You are not the owner of the specified bucket, or you do not have the
    /// <code>s3:PutIntelligentTieringConfiguration</code> bucket permission to set the configuration
    /// on the bucket. 
    /// </para>
    ///  </dd> </dl>
    /// </summary>
    public partial class PutBucketIntelligentTieringConfigurationRequest : AmazonWebServiceRequest
    {
        private string bucketName;
        private string intelligentTieringId;
        private IntelligentTieringConfiguration intelligentTieringConfiguration;

        /// <summary>
        /// <para>The name of the Amazon S3 bucket whose configuration you want to modify or retrieve.</para>
        /// </summary>
        public string BucketName
        {
            get { return this.bucketName; }
            set { this.bucketName = value; }
        }

        // Check to see if BucketName property is set
        internal bool IsSetBucketName()
        {
            return this.bucketName != null;
        }

        /// <summary>
        /// <para>The ID used to identify the S3 Intelligent-Tiering configuration.</para>
        /// </summary>
        public string IntelligentTieringId
        {
            get { return this.intelligentTieringId; }
            set { this.intelligentTieringId = value; }
        }

        // Check to see if IntelligentTieringId property is set
        internal bool IsSetIntelligentTieringId()
        {
            return this.intelligentTieringId != null;
        }

        /// <summary>
        /// <para>Container for S3 Intelligent-Tiering configuration.</para>
        /// </summary>
        public IntelligentTieringConfiguration IntelligentTieringConfiguration
        {
            get { return this.intelligentTieringConfiguration; }
            set { this.intelligentTieringConfiguration = value; }
        }

        // Check to see if IntelligentTieringConfiguration property is set
        internal bool IsIntelligentTieringConfiguration()
        {
            return this.intelligentTieringConfiguration != null;
        }
    }
}