/*
 * 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 fsx-2018-03-01.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.FSx.Model
{
    /// 
    /// The configuration object for the Microsoft Windows file system used in CreateFileSystem
    /// and CreateFileSystemFromBackup operations.
    /// 
    public partial class CreateFileSystemWindowsConfiguration
    {
        private string _activeDirectoryId;
        private List _aliases = new List();
        private WindowsAuditLogCreateConfiguration _auditLogConfiguration;
        private int? _automaticBackupRetentionDays;
        private bool? _copyTagsToBackups;
        private string _dailyAutomaticBackupStartTime;
        private WindowsDeploymentType _deploymentType;
        private string _preferredSubnetId;
        private SelfManagedActiveDirectoryConfiguration _selfManagedActiveDirectoryConfiguration;
        private int? _throughputCapacity;
        private string _weeklyMaintenanceStartTime;
        /// 
        /// Gets and sets the property ActiveDirectoryId. 
        /// 
        /// The ID for an existing Amazon Web Services Managed Microsoft Active Directory (AD)
        /// instance that the file system should join when it's created.
        /// 
        /// 
        [AWSProperty(Min=12, Max=12)]
        public string ActiveDirectoryId
        {
            get { return this._activeDirectoryId; }
            set { this._activeDirectoryId = value; }
        }
        // Check to see if ActiveDirectoryId property is set
        internal bool IsSetActiveDirectoryId()
        {
            return this._activeDirectoryId != null;
        }
        /// 
        /// Gets and sets the property Aliases. 
        /// 
        /// An array of one or more DNS alias names that you want to associate with the Amazon
        /// FSx file system. Aliases allow you to use existing DNS names to access the data in
        /// your Amazon FSx file system. You can associate up to 50 aliases with a file system
        /// at any time. You can associate additional DNS aliases after you create the file system
        /// using the AssociateFileSystemAliases operation. You can remove DNS aliases from the
        /// file system after it is created using the DisassociateFileSystemAliases operation.
        /// You only need to specify the alias name in the request payload.
        /// 
        ///  
        /// 
        /// For more information, see Working
        /// with DNS Aliases and Walkthrough
        /// 5: Using DNS aliases to access your file system, including additional steps you
        /// must take to be able to access your file system using a DNS alias.
        /// 
        ///  
        /// 
        /// An alias name has to meet the following requirements:
        /// 
        ///   -  
        /// 
        /// Formatted as a fully-qualified domain name (FQDN), 
hostname.domain, for
        /// example, accounting.example.com.
        /// 
        ///    -  
        /// 
        /// Can contain alphanumeric characters, the underscore (_), and the hyphen (-).
        /// 
        ///  
  -  
        /// 
        /// Cannot start or end with a hyphen.
        /// 
        ///  
  -  
        /// 
        /// Can start with a numeric.
        /// 
        ///  
  
 
        /// 
        /// For DNS alias names, Amazon FSx stores alphabetic characters as lowercase letters
        /// (a-z), regardless of how you specify them: as uppercase letters, lowercase letters,
        /// or the corresponding letters in escape codes.
        /// 
        /// 
        [AWSProperty(Max=50)]
        public List Aliases
        {
            get { return this._aliases; }
            set { this._aliases = value; }
        }
        // Check to see if Aliases property is set
        internal bool IsSetAliases()
        {
            return this._aliases != null && this._aliases.Count > 0; 
        }
        /// 
        /// Gets and sets the property AuditLogConfiguration. 
        /// 
        /// The configuration that Amazon FSx for Windows File Server uses to audit and log user
        /// accesses of files, folders, and file shares on the Amazon FSx for Windows File Server
        /// file system.
        /// 
        /// 
        public WindowsAuditLogCreateConfiguration AuditLogConfiguration
        {
            get { return this._auditLogConfiguration; }
            set { this._auditLogConfiguration = value; }
        }
        // Check to see if AuditLogConfiguration property is set
        internal bool IsSetAuditLogConfiguration()
        {
            return this._auditLogConfiguration != null;
        }
        /// 
        /// Gets and sets the property AutomaticBackupRetentionDays. 
        /// 
        /// The number of days to retain automatic backups. Setting this property to 0
        /// disables automatic backups. You can retain automatic backups for a maximum of 90 days.
        /// The default is 30.
        /// 
        /// 
        [AWSProperty(Min=0, Max=90)]
        public int AutomaticBackupRetentionDays
        {
            get { return this._automaticBackupRetentionDays.GetValueOrDefault(); }
            set { this._automaticBackupRetentionDays = value; }
        }
        // Check to see if AutomaticBackupRetentionDays property is set
        internal bool IsSetAutomaticBackupRetentionDays()
        {
            return this._automaticBackupRetentionDays.HasValue; 
        }
        /// 
        /// Gets and sets the property CopyTagsToBackups. 
        /// 
        /// A boolean flag indicating whether tags for the file system should be copied to backups.
        /// This value defaults to false. If it's set to true, all tags for the file system are
        /// copied to all automatic and user-initiated backups where the user doesn't specify
        /// tags. If this value is true, and you specify one or more tags, only the specified
        /// tags are copied to backups. If you specify one or more tags when creating a user-initiated
        /// backup, no tags are copied from the file system, regardless of this value.
        /// 
        /// 
        public bool CopyTagsToBackups
        {
            get { return this._copyTagsToBackups.GetValueOrDefault(); }
            set { this._copyTagsToBackups = value; }
        }
        // Check to see if CopyTagsToBackups property is set
        internal bool IsSetCopyTagsToBackups()
        {
            return this._copyTagsToBackups.HasValue; 
        }
        /// 
        /// Gets and sets the property DailyAutomaticBackupStartTime. 
        /// 
        /// The preferred time to take daily automatic backups, formatted HH:MM in the UTC time
        /// zone.
        /// 
        /// 
        [AWSProperty(Min=5, Max=5)]
        public string DailyAutomaticBackupStartTime
        {
            get { return this._dailyAutomaticBackupStartTime; }
            set { this._dailyAutomaticBackupStartTime = value; }
        }
        // Check to see if DailyAutomaticBackupStartTime property is set
        internal bool IsSetDailyAutomaticBackupStartTime()
        {
            return this._dailyAutomaticBackupStartTime != null;
        }
        /// 
        /// Gets and sets the property DeploymentType. 
        /// 
        /// Specifies the file system deployment type, valid values are the following:
        /// 
        ///   -  
        /// 
        ///  
MULTI_AZ_1 - Deploys a high availability file system that is configured
        /// for Multi-AZ redundancy to tolerate temporary Availability Zone (AZ) unavailability.
        /// You can only deploy a Multi-AZ file system in Amazon Web Services Regions that have
        /// a minimum of three Availability Zones. Also supports HDD storage type
        /// 
        ///    -  
        /// 
        ///  
SINGLE_AZ_1 - (Default) Choose to deploy a file system that is configured
        /// for single AZ redundancy.
        /// 
        ///    -  
        /// 
        ///  
SINGLE_AZ_2 - The latest generation Single AZ file system. Specifies
        /// a file system that is configured for single AZ redundancy and supports HDD storage
        /// type.
        /// 
        ///    
 
        /// 
        /// For more information, see 
        /// Availability and Durability: Single-AZ and Multi-AZ File Systems.
        /// 
        /// 
        public WindowsDeploymentType DeploymentType
        {
            get { return this._deploymentType; }
            set { this._deploymentType = value; }
        }
        // Check to see if DeploymentType property is set
        internal bool IsSetDeploymentType()
        {
            return this._deploymentType != null;
        }
        /// 
        /// Gets and sets the property PreferredSubnetId. 
        /// 
        /// Required when DeploymentType is set to MULTI_AZ_1. This
        /// specifies the subnet in which you want the preferred file server to be located. For
        /// in-Amazon Web Services applications, we recommend that you launch your clients in
        /// the same Availability Zone (AZ) as your preferred file server to reduce cross-AZ data
        /// transfer costs and minimize latency. 
        /// 
        /// 
        [AWSProperty(Min=15, Max=24)]
        public string PreferredSubnetId
        {
            get { return this._preferredSubnetId; }
            set { this._preferredSubnetId = value; }
        }
        // Check to see if PreferredSubnetId property is set
        internal bool IsSetPreferredSubnetId()
        {
            return this._preferredSubnetId != null;
        }
        /// 
        /// Gets and sets the property SelfManagedActiveDirectoryConfiguration.
        /// 
        public SelfManagedActiveDirectoryConfiguration SelfManagedActiveDirectoryConfiguration
        {
            get { return this._selfManagedActiveDirectoryConfiguration; }
            set { this._selfManagedActiveDirectoryConfiguration = value; }
        }
        // Check to see if SelfManagedActiveDirectoryConfiguration property is set
        internal bool IsSetSelfManagedActiveDirectoryConfiguration()
        {
            return this._selfManagedActiveDirectoryConfiguration != null;
        }
        /// 
        /// Gets and sets the property ThroughputCapacity. 
        /// 
        /// Sets the throughput capacity of an Amazon FSx file system, measured in megabytes per
        /// second (MB/s), in 2 to the nth increments, between 2^3 (8) and 2^11 (2048).
        /// 
        /// 
        [AWSProperty(Required=true, Min=8, Max=100000)]
        public int ThroughputCapacity
        {
            get { return this._throughputCapacity.GetValueOrDefault(); }
            set { this._throughputCapacity = value; }
        }
        // Check to see if ThroughputCapacity property is set
        internal bool IsSetThroughputCapacity()
        {
            return this._throughputCapacity.HasValue; 
        }
        /// 
        /// Gets and sets the property WeeklyMaintenanceStartTime. 
        /// 
        /// The preferred start time to perform weekly maintenance, formatted d:HH:MM in the UTC
        /// time zone, where d is the weekday number, from 1 through 7, beginning with Monday
        /// and ending with Sunday.
        /// 
        /// 
        [AWSProperty(Min=7, Max=7)]
        public string WeeklyMaintenanceStartTime
        {
            get { return this._weeklyMaintenanceStartTime; }
            set { this._weeklyMaintenanceStartTime = value; }
        }
        // Check to see if WeeklyMaintenanceStartTime property is set
        internal bool IsSetWeeklyMaintenanceStartTime()
        {
            return this._weeklyMaintenanceStartTime != null;
        }
    }
}