/*
 * 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 apigatewayv2-2018-11-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.ApiGatewayV2.Model
{
    /// 
    /// The domain name configuration.
    /// 
    public partial class DomainNameConfiguration
    {
        private string _apiGatewayDomainName;
        private string _certificateArn;
        private string _certificateName;
        private DateTime? _certificateUploadDate;
        private DomainNameStatus _domainNameStatus;
        private string _domainNameStatusMessage;
        private EndpointType _endpointType;
        private string _hostedZoneId;
        private string _ownershipVerificationCertificateArn;
        private SecurityPolicy _securityPolicy;
        /// 
        /// Gets and sets the property ApiGatewayDomainName. 
        /// 
        /// A domain name for the API.
        /// 
        /// 
        public string ApiGatewayDomainName
        {
            get { return this._apiGatewayDomainName; }
            set { this._apiGatewayDomainName = value; }
        }
        // Check to see if ApiGatewayDomainName property is set
        internal bool IsSetApiGatewayDomainName()
        {
            return this._apiGatewayDomainName != null;
        }
        /// 
        /// Gets and sets the property CertificateArn. 
        /// 
        /// An AWS-managed certificate that will be used by the edge-optimized endpoint for this
        /// domain name. AWS Certificate Manager is the only supported source.
        /// 
        /// 
        public string CertificateArn
        {
            get { return this._certificateArn; }
            set { this._certificateArn = value; }
        }
        // Check to see if CertificateArn property is set
        internal bool IsSetCertificateArn()
        {
            return this._certificateArn != null;
        }
        /// 
        /// Gets and sets the property CertificateName. 
        /// 
        /// The user-friendly name of the certificate that will be used by the edge-optimized
        /// endpoint for this domain name.
        /// 
        /// 
        public string CertificateName
        {
            get { return this._certificateName; }
            set { this._certificateName = value; }
        }
        // Check to see if CertificateName property is set
        internal bool IsSetCertificateName()
        {
            return this._certificateName != null;
        }
        /// 
        /// Gets and sets the property CertificateUploadDate. 
        /// 
        /// The timestamp when the certificate that was used by edge-optimized endpoint for this
        /// domain name was uploaded.
        /// 
        /// 
        public DateTime CertificateUploadDate
        {
            get { return this._certificateUploadDate.GetValueOrDefault(); }
            set { this._certificateUploadDate = value; }
        }
        // Check to see if CertificateUploadDate property is set
        internal bool IsSetCertificateUploadDate()
        {
            return this._certificateUploadDate.HasValue; 
        }
        /// 
        /// Gets and sets the property DomainNameStatus. 
        /// 
        /// The status of the domain name migration. The valid values are AVAILABLE, UPDATING,
        /// PENDING_CERTIFICATE_REIMPORT, and PENDING_OWNERSHIP_VERIFICATION. If the status is
        /// UPDATING, the domain cannot be modified further until the existing operation is complete.
        /// If it is AVAILABLE, the domain can be updated.
        /// 
        /// 
        public DomainNameStatus DomainNameStatus
        {
            get { return this._domainNameStatus; }
            set { this._domainNameStatus = value; }
        }
        // Check to see if DomainNameStatus property is set
        internal bool IsSetDomainNameStatus()
        {
            return this._domainNameStatus != null;
        }
        /// 
        /// Gets and sets the property DomainNameStatusMessage. 
        /// 
        /// An optional text message containing detailed information about status of the domain
        /// name migration.
        /// 
        /// 
        public string DomainNameStatusMessage
        {
            get { return this._domainNameStatusMessage; }
            set { this._domainNameStatusMessage = value; }
        }
        // Check to see if DomainNameStatusMessage property is set
        internal bool IsSetDomainNameStatusMessage()
        {
            return this._domainNameStatusMessage != null;
        }
        /// 
        /// Gets and sets the property EndpointType. 
        /// 
        /// The endpoint type.
        /// 
        /// 
        public EndpointType EndpointType
        {
            get { return this._endpointType; }
            set { this._endpointType = value; }
        }
        // Check to see if EndpointType property is set
        internal bool IsSetEndpointType()
        {
            return this._endpointType != null;
        }
        /// 
        /// Gets and sets the property HostedZoneId. 
        /// 
        /// The Amazon Route 53 Hosted Zone ID of the endpoint.
        /// 
        /// 
        public string HostedZoneId
        {
            get { return this._hostedZoneId; }
            set { this._hostedZoneId = value; }
        }
        // Check to see if HostedZoneId property is set
        internal bool IsSetHostedZoneId()
        {
            return this._hostedZoneId != null;
        }
        /// 
        /// Gets and sets the property OwnershipVerificationCertificateArn. 
        /// 
        /// The ARN of the public certificate issued by ACM to validate ownership of your custom
        /// domain. Only required when configuring mutual TLS and using an ACM imported or private
        /// CA certificate ARN as the regionalCertificateArn
        /// 
        /// 
        public string OwnershipVerificationCertificateArn
        {
            get { return this._ownershipVerificationCertificateArn; }
            set { this._ownershipVerificationCertificateArn = value; }
        }
        // Check to see if OwnershipVerificationCertificateArn property is set
        internal bool IsSetOwnershipVerificationCertificateArn()
        {
            return this._ownershipVerificationCertificateArn != null;
        }
        /// 
        /// Gets and sets the property SecurityPolicy. 
        /// 
        /// The Transport Layer Security (TLS) version of the security policy for this domain
        /// name. The valid values are TLS_1_0 and TLS_1_2.
        /// 
        /// 
        public SecurityPolicy SecurityPolicy
        {
            get { return this._securityPolicy; }
            set { this._securityPolicy = value; }
        }
        // Check to see if SecurityPolicy property is set
        internal bool IsSetSecurityPolicy()
        {
            return this._securityPolicy != null;
        }
    }
}