# encoding: utf-8
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::Web::Mgmt::V2015_08_01
  module Models
    #
    # ARM resource for a certificate order that is purchased through Azure.
    #
    class AppServiceCertificateOrderPatchResource < ProxyOnlyResource

      include MsRestAzure

      # @return [Hash{String => AppServiceCertificate}] State of the Key Vault
      # secret.
      attr_accessor :certificates

      # @return [String] Certificate distinguished name.
      attr_accessor :distinguished_name

      # @return [String] Domain verification token.
      attr_accessor :domain_verification_token

      # @return [Integer] Duration in years (must be between 1 and 3). Default
      # value: 1 .
      attr_accessor :validity_in_years

      # @return [Integer] Certificate key size. Default value: 2048 .
      attr_accessor :key_size

      # @return [CertificateProductType] Certificate product type. Possible
      # values include: 'StandardDomainValidatedSsl',
      # 'StandardDomainValidatedWildCardSsl'
      attr_accessor :product_type

      # @return [Boolean] <code>true</code> if the certificate should be
      # automatically renewed when it expires; otherwise, <code>false</code>.
      # Default value: true .
      attr_accessor :auto_renew

      # @return [ProvisioningState] Status of certificate order. Possible
      # values include: 'Succeeded', 'Failed', 'Canceled', 'InProgress',
      # 'Deleting'
      attr_accessor :provisioning_state

      # @return [CertificateOrderStatus] Current order status. Possible values
      # include: 'Pendingissuance', 'Issued', 'Revoked', 'Canceled', 'Denied',
      # 'Pendingrevocation', 'PendingRekey', 'Unused', 'Expired',
      # 'NotSubmitted'
      attr_accessor :status

      # @return [CertificateDetails] Signed certificate.
      attr_accessor :signed_certificate

      # @return [String] Last CSR that was created for this order.
      attr_accessor :csr

      # @return [CertificateDetails] Intermediate certificate.
      attr_accessor :intermediate

      # @return [CertificateDetails] Root certificate.
      attr_accessor :root

      # @return [String] Current serial number of the certificate.
      attr_accessor :serial_number

      # @return [DateTime] Certificate last issuance time.
      attr_accessor :last_certificate_issuance_time

      # @return [DateTime] Certificate expiration time.
      attr_accessor :expiration_time

      # @return [Boolean] <code>true</code> if private key is external;
      # otherwise, <code>false</code>.
      attr_accessor :is_private_key_external

      # @return [Array<Enum>] Reasons why App Service Certificate is not
      # renewable at the current moment.
      attr_accessor :app_service_certificate_not_renewable_reasons

      # @return [DateTime] Time stamp when the certificate would be auto
      # renewed next
      attr_accessor :next_auto_renewal_time_stamp


      #
      # Mapper for AppServiceCertificateOrderPatchResource class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'AppServiceCertificateOrderPatchResource',
          type: {
            name: 'Composite',
            class_name: 'AppServiceCertificateOrderPatchResource',
            model_properties: {
              id: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'id',
                type: {
                  name: 'String'
                }
              },
              name: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'name',
                type: {
                  name: 'String'
                }
              },
              kind: {
                client_side_validation: true,
                required: false,
                serialized_name: 'kind',
                type: {
                  name: 'String'
                }
              },
              type: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'type',
                type: {
                  name: 'String'
                }
              },
              certificates: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.certificates',
                type: {
                  name: 'Dictionary',
                  value: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'AppServiceCertificateElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'AppServiceCertificate'
                      }
                  }
                }
              },
              distinguished_name: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.distinguishedName',
                type: {
                  name: 'String'
                }
              },
              domain_verification_token: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.domainVerificationToken',
                type: {
                  name: 'String'
                }
              },
              validity_in_years: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.validityInYears',
                default_value: 1,
                constraints: {
                  InclusiveMaximum: 3,
                  InclusiveMinimum: 1
                },
                type: {
                  name: 'Number'
                }
              },
              key_size: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.keySize',
                default_value: 2048,
                type: {
                  name: 'Number'
                }
              },
              product_type: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.productType',
                type: {
                  name: 'Enum',
                  module: 'CertificateProductType'
                }
              },
              auto_renew: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.autoRenew',
                default_value: true,
                type: {
                  name: 'Boolean'
                }
              },
              provisioning_state: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.provisioningState',
                type: {
                  name: 'Enum',
                  module: 'ProvisioningState'
                }
              },
              status: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.status',
                type: {
                  name: 'Enum',
                  module: 'CertificateOrderStatus'
                }
              },
              signed_certificate: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.signedCertificate',
                type: {
                  name: 'Composite',
                  class_name: 'CertificateDetails'
                }
              },
              csr: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.csr',
                type: {
                  name: 'String'
                }
              },
              intermediate: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.intermediate',
                type: {
                  name: 'Composite',
                  class_name: 'CertificateDetails'
                }
              },
              root: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.root',
                type: {
                  name: 'Composite',
                  class_name: 'CertificateDetails'
                }
              },
              serial_number: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.serialNumber',
                type: {
                  name: 'String'
                }
              },
              last_certificate_issuance_time: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.lastCertificateIssuanceTime',
                type: {
                  name: 'DateTime'
                }
              },
              expiration_time: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.expirationTime',
                type: {
                  name: 'DateTime'
                }
              },
              is_private_key_external: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.isPrivateKeyExternal',
                type: {
                  name: 'Boolean'
                }
              },
              app_service_certificate_not_renewable_reasons: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.appServiceCertificateNotRenewableReasons',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'enumElementType',
                      type: {
                        name: 'String'
                      }
                  }
                }
              },
              next_auto_renewal_time_stamp: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.nextAutoRenewalTimeStamp',
                type: {
                  name: 'DateTime'
                }
              }
            }
          }
        }
      end
    end
  end
end
