/*
 * 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 lightsail-2016-11-28.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.Lightsail.Model
{
    /// 
    /// Describes the full details of an Amazon Lightsail SSL/TLS certificate.
    /// 
    ///   
    /// 
    /// To get a summary of a certificate, use the GetCertificates action and
    /// omit includeCertificateDetails from your request. The response will include
    /// only the certificate Amazon Resource Name (ARN), certificate name, domain name, and
    /// tags.
    /// 
    ///  
    /// 
    public partial class Certificate
    {
        private string _arn;
        private DateTime? _createdAt;
        private string _domainName;
        private List _domainValidationRecords = new List();
        private string _eligibleToRenew;
        private int? _inUseResourceCount;
        private DateTime? _issuedAt;
        private string _issuerca;
        private string _keyAlgorithm;
        private string _name;
        private DateTime? _notAfter;
        private DateTime? _notBefore;
        private RenewalSummary _renewalSummary;
        private string _requestFailureReason;
        private string _revocationReason;
        private DateTime? _revokedAt;
        private string _serialNumber;
        private CertificateStatus _status;
        private List _subjectAlternativeNames = new List();
        private string _supportCode;
        private List _tags = new List();
        /// 
        /// Gets and sets the property Arn. 
        /// 
        /// The Amazon Resource Name (ARN) of the certificate.
        /// 
        /// 
        public string Arn
        {
            get { return this._arn; }
            set { this._arn = value; }
        }
        // Check to see if Arn property is set
        internal bool IsSetArn()
        {
            return this._arn != null;
        }
        /// 
        /// Gets and sets the property CreatedAt. 
        /// 
        /// The timestamp when the certificate was created.
        /// 
        /// 
        public DateTime CreatedAt
        {
            get { return this._createdAt.GetValueOrDefault(); }
            set { this._createdAt = value; }
        }
        // Check to see if CreatedAt property is set
        internal bool IsSetCreatedAt()
        {
            return this._createdAt.HasValue; 
        }
        /// 
        /// Gets and sets the property DomainName. 
        /// 
        /// The domain name of the certificate.
        /// 
        /// 
        public string DomainName
        {
            get { return this._domainName; }
            set { this._domainName = value; }
        }
        // Check to see if DomainName property is set
        internal bool IsSetDomainName()
        {
            return this._domainName != null;
        }
        /// 
        /// Gets and sets the property DomainValidationRecords. 
        /// 
        /// An array of objects that describe the domain validation records of the certificate.
        /// 
        /// 
        public List DomainValidationRecords
        {
            get { return this._domainValidationRecords; }
            set { this._domainValidationRecords = value; }
        }
        // Check to see if DomainValidationRecords property is set
        internal bool IsSetDomainValidationRecords()
        {
            return this._domainValidationRecords != null && this._domainValidationRecords.Count > 0; 
        }
        /// 
        /// Gets and sets the property EligibleToRenew. 
        /// 
        /// The renewal eligibility of the certificate.
        /// 
        /// 
        public string EligibleToRenew
        {
            get { return this._eligibleToRenew; }
            set { this._eligibleToRenew = value; }
        }
        // Check to see if EligibleToRenew property is set
        internal bool IsSetEligibleToRenew()
        {
            return this._eligibleToRenew != null;
        }
        /// 
        /// Gets and sets the property InUseResourceCount. 
        /// 
        /// The number of Lightsail resources that the certificate is attached to.
        /// 
        /// 
        public int InUseResourceCount
        {
            get { return this._inUseResourceCount.GetValueOrDefault(); }
            set { this._inUseResourceCount = value; }
        }
        // Check to see if InUseResourceCount property is set
        internal bool IsSetInUseResourceCount()
        {
            return this._inUseResourceCount.HasValue; 
        }
        /// 
        /// Gets and sets the property IssuedAt. 
        /// 
        /// The timestamp when the certificate was issued.
        /// 
        /// 
        public DateTime IssuedAt
        {
            get { return this._issuedAt.GetValueOrDefault(); }
            set { this._issuedAt = value; }
        }
        // Check to see if IssuedAt property is set
        internal bool IsSetIssuedAt()
        {
            return this._issuedAt.HasValue; 
        }
        /// 
        /// Gets and sets the property IssuerCA. 
        /// 
        /// The certificate authority that issued the certificate.
        /// 
        /// 
        public string IssuerCA
        {
            get { return this._issuerca; }
            set { this._issuerca = value; }
        }
        // Check to see if IssuerCA property is set
        internal bool IsSetIssuerCA()
        {
            return this._issuerca != null;
        }
        /// 
        /// Gets and sets the property KeyAlgorithm. 
        /// 
        /// The algorithm used to generate the key pair (the public and private key) of the certificate.
        /// 
        /// 
        public string KeyAlgorithm
        {
            get { return this._keyAlgorithm; }
            set { this._keyAlgorithm = value; }
        }
        // Check to see if KeyAlgorithm property is set
        internal bool IsSetKeyAlgorithm()
        {
            return this._keyAlgorithm != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The name of the certificate (e.g., my-certificate).
        /// 
        /// 
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property NotAfter. 
        /// 
        /// The timestamp when the certificate expires.
        /// 
        /// 
        public DateTime NotAfter
        {
            get { return this._notAfter.GetValueOrDefault(); }
            set { this._notAfter = value; }
        }
        // Check to see if NotAfter property is set
        internal bool IsSetNotAfter()
        {
            return this._notAfter.HasValue; 
        }
        /// 
        /// Gets and sets the property NotBefore. 
        /// 
        /// The timestamp when the certificate is first valid.
        /// 
        /// 
        public DateTime NotBefore
        {
            get { return this._notBefore.GetValueOrDefault(); }
            set { this._notBefore = value; }
        }
        // Check to see if NotBefore property is set
        internal bool IsSetNotBefore()
        {
            return this._notBefore.HasValue; 
        }
        /// 
        /// Gets and sets the property RenewalSummary. 
        /// 
        /// An object that describes the status of the certificate renewal managed by Lightsail.
        /// 
        /// 
        public RenewalSummary RenewalSummary
        {
            get { return this._renewalSummary; }
            set { this._renewalSummary = value; }
        }
        // Check to see if RenewalSummary property is set
        internal bool IsSetRenewalSummary()
        {
            return this._renewalSummary != null;
        }
        /// 
        /// Gets and sets the property RequestFailureReason. 
        /// 
        /// The validation failure reason, if any, of the certificate.
        /// 
        ///  
        /// 
        /// The following failure reasons are possible:
        /// 
        ///   -  
        /// 
        ///   NO_AVAILABLE_CONTACTS- This failure applies to email validation,
        /// which is not available for Lightsail certificates.
        /// 
        ///
-  
        /// 
        ///   ADDITIONAL_VERIFICATION_REQUIRED- Lightsail requires additional
        /// information to process this certificate request. This can happen as a fraud-protection
        /// measure, such as when the domain ranks within the Alexa top 1000 websites. To provide
        /// the required information, use the Amazon
        /// Web Services Support Center to contact Amazon Web Services Support.
        /// 
        ///   
        /// 
        /// You cannot request a certificate for Amazon-owned domain names such as those ending
        /// in amazonaws.com, cloudfront.net, or elasticbeanstalk.com.
        /// 
        ///
-  
        /// 
        ///   DOMAIN_NOT_ALLOWED- One or more of the domain names in the
        /// certificate request was reported as an unsafe domain by VirusTotal.
        /// To correct the problem, search for your domain name on the VirusTotal
        /// website. If your domain is reported as suspicious, see Google
        /// Help for Hacked Websites to learn what you can do.
        /// 
        ///  
        /// 
        /// If you believe that the result is a false positive, notify the organization that is
        /// reporting the domain. VirusTotal is an aggregate of several antivirus and URL scanners
        /// and cannot remove your domain from a block list itself. After you correct the problem
        /// and the VirusTotal registry has been updated, request a new certificate.
        /// 
        ///  
        /// 
        /// If you see this error and your domain is not included in the VirusTotal list, visit
        /// the Amazon Web Services Support
        /// Center and create a case.
        /// 
        ///
-  
        /// 
        ///   INVALID_PUBLIC_DOMAIN- One or more of the domain names in
        /// the certificate request is not valid. Typically, this is because a domain name in
        /// the request is not a valid top-level domain. Try to request a certificate again, correcting
        /// any spelling errors or typos that were in the failed request, and ensure that all
        /// domain names in the request are for valid top-level domains. For example, you cannot
        /// request a certificate forexample.invalidpublicdomainbecauseinvalidpublicdomain/// is not a valid top-level domain.
        /// 
        ///
-  
        /// 
        ///   OTHER- Typically, this failure occurs when there is a typographical
        /// error in one or more of the domain names in the certificate request. Try to request
        /// a certificate again, correcting any spelling errors or typos that were in the failed
        /// request. 
        /// 
        ///
/// 
        public string RequestFailureReason
        {
            get { return this._requestFailureReason; }
            set { this._requestFailureReason = value; }
        }
        // Check to see if RequestFailureReason property is set
        internal bool IsSetRequestFailureReason()
        {
            return this._requestFailureReason != null;
        }
        /// 
        /// Gets and sets the property RevocationReason. 
        /// 
        /// The reason the certificate was revoked. This value is present only when the certificate
        /// status isREVOKED.
        /// 
        /// 
        public string RevocationReason
        {
            get { return this._revocationReason; }
            set { this._revocationReason = value; }
        }
        // Check to see if RevocationReason property is set
        internal bool IsSetRevocationReason()
        {
            return this._revocationReason != null;
        }
        /// 
        /// Gets and sets the property RevokedAt. 
        /// 
        /// The timestamp when the certificate was revoked. This value is present only when the
        /// certificate status is REVOKED.
        /// 
        /// 
        public DateTime RevokedAt
        {
            get { return this._revokedAt.GetValueOrDefault(); }
            set { this._revokedAt = value; }
        }
        // Check to see if RevokedAt property is set
        internal bool IsSetRevokedAt()
        {
            return this._revokedAt.HasValue; 
        }
        /// 
        /// Gets and sets the property SerialNumber. 
        /// 
        /// The serial number of the certificate.
        /// 
        /// 
        public string SerialNumber
        {
            get { return this._serialNumber; }
            set { this._serialNumber = value; }
        }
        // Check to see if SerialNumber property is set
        internal bool IsSetSerialNumber()
        {
            return this._serialNumber != null;
        }
        /// 
        /// Gets and sets the property Status. 
        /// 
        /// The validation status of the certificate.
        /// 
        /// 
        public CertificateStatus Status
        {
            get { return this._status; }
            set { this._status = value; }
        }
        // Check to see if Status property is set
        internal bool IsSetStatus()
        {
            return this._status != null;
        }
        /// 
        /// Gets and sets the property SubjectAlternativeNames. 
        /// 
        /// An array of strings that specify the alternate domains (e.g., example2.com)
        /// and subdomains (e.g., blog.example.com) of the certificate.
        /// 
        /// 
        public List SubjectAlternativeNames
        {
            get { return this._subjectAlternativeNames; }
            set { this._subjectAlternativeNames = value; }
        }
        // Check to see if SubjectAlternativeNames property is set
        internal bool IsSetSubjectAlternativeNames()
        {
            return this._subjectAlternativeNames != null && this._subjectAlternativeNames.Count > 0; 
        }
        /// 
        /// Gets and sets the property SupportCode. 
        /// 
        /// The support code. Include this code in your email to support when you have questions
        /// about your Lightsail certificate. This code enables our support team to look up your
        /// Lightsail information more easily.
        /// 
        /// 
        public string SupportCode
        {
            get { return this._supportCode; }
            set { this._supportCode = value; }
        }
        // Check to see if SupportCode property is set
        internal bool IsSetSupportCode()
        {
            return this._supportCode != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// The tag keys and optional values for the resource. For more information about tags
        /// in Lightsail, see the Amazon
        /// Lightsail Developer Guide.
        /// 
        /// 
        public List Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
    }
}