# 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::Migrate::Mgmt::V2018_02_02
  module Models
    #
    # An assessment created for a group in the Migration project.
    #
    class Assessment

      include MsRestAzure

      # @return [String] Path reference to this assessment.
      # /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Migrate/projects/{projectName}/groups/{groupName}/assessment/{assessmentName}
      attr_accessor :id

      # @return [String] Unique name of an assessment.
      attr_accessor :name

      # @return [String] For optimistic concurrency control.
      attr_accessor :e_tag

      # @return [String] Type of the object =
      # [Microsoft.Migrate/projects/groups/assessments].
      attr_accessor :type

      # @return [AzureLocation] Target Azure location for which the machines
      # should be assessed. These enums are the same as used by Compute API.
      # Possible values include: 'Unknown', 'EastAsia', 'SoutheastAsia',
      # 'AustraliaEast', 'AustraliaSoutheast', 'BrazilSouth', 'CanadaCentral',
      # 'CanadaEast', 'WestEurope', 'NorthEurope', 'CentralIndia',
      # 'SouthIndia', 'WestIndia', 'JapanEast', 'JapanWest', 'KoreaCentral',
      # 'KoreaSouth', 'UkWest', 'UkSouth', 'NorthCentralUs', 'EastUs',
      # 'WestUs2', 'SouthCentralUs', 'CentralUs', 'EastUs2', 'WestUs',
      # 'WestCentralUs', 'GermanyCentral', 'GermanyNortheast', 'ChinaNorth',
      # 'ChinaEast'
      attr_accessor :azure_location

      # @return [AzureOfferCode] Offer code according to which cost estimation
      # is done. Possible values include: 'Unknown', 'MSAZR0003P',
      # 'MSAZR0044P', 'MSAZR0059P', 'MSAZR0060P', 'MSAZR0062P', 'MSAZR0063P',
      # 'MSAZR0064P', 'MSAZR0029P', 'MSAZR0022P', 'MSAZR0023P', 'MSAZR0148P',
      # 'MSAZR0025P', 'MSAZR0036P', 'MSAZR0120P', 'MSAZR0121P', 'MSAZR0122P',
      # 'MSAZR0123P', 'MSAZR0124P', 'MSAZR0125P', 'MSAZR0126P', 'MSAZR0127P',
      # 'MSAZR0128P', 'MSAZR0129P', 'MSAZR0130P', 'MSAZR0111P', 'MSAZR0144P',
      # 'MSAZR0149P', 'MSMCAZR0044P', 'MSMCAZR0059P', 'MSMCAZR0060P',
      # 'MSMCAZR0063P', 'MSMCAZR0120P', 'MSMCAZR0121P', 'MSMCAZR0125P',
      # 'MSMCAZR0128P', 'MSAZRDE0003P', 'MSAZRDE0044P'
      attr_accessor :azure_offer_code

      # @return [AzurePricingTier] Pricing tier for Size evaluation. Possible
      # values include: 'Standard', 'Basic'
      attr_accessor :azure_pricing_tier

      # @return [AzureStorageRedundancy] Storage Redundancy type offered by
      # Azure. Possible values include: 'Unknown', 'LocallyRedundant',
      # 'ZoneRedundant', 'GeoRedundant', 'ReadAccessGeoRedundant'
      attr_accessor :azure_storage_redundancy

      # @return [Float] Scaling factor used over utilization data to add a
      # performance buffer for new machines to be created in Azure. Min Value =
      # 1.0, Max value = 1.9, Default = 1.3.
      attr_accessor :scaling_factor

      # @return [Percentile] Percentile of performance data used to recommend
      # Azure size. Possible values include: 'Percentile50', 'Percentile90',
      # 'Percentile95', 'Percentile99'
      attr_accessor :percentile

      # @return [TimeRange] Time range of performance data used to recommend a
      # size. Possible values include: 'Day', 'Week', 'Month'
      attr_accessor :time_range

      # @return [AssessmentStage] User configurable setting that describes the
      # status of the assessment. Possible values include: 'InProgress',
      # 'UnderReview', 'Approved'
      attr_accessor :stage

      # @return [Currency] Currency to report prices in. Possible values
      # include: 'Unknown', 'USD', 'DKK', 'CAD', 'IDR', 'JPY', 'KRW', 'NZD',
      # 'NOK', 'RUB', 'SAR', 'ZAR', 'SEK', 'TRY', 'GBP', 'MXN', 'MYR', 'INR',
      # 'HKD', 'BRL', 'TWD', 'EUR', 'CHF', 'ARS', 'AUD', 'CNY'
      attr_accessor :currency

      # @return [AzureHybridUseBenefit] AHUB discount on windows virtual
      # machines. Possible values include: 'Unknown', 'Yes', 'No'
      attr_accessor :azure_hybrid_use_benefit

      # @return [Float] Custom discount percentage to be applied on final
      # costs. Can be in the range [0, 100].
      attr_accessor :discount_percentage

      # @return [Float] Confidence rating percentage for assessment. Can be in
      # the range [0, 100].
      attr_accessor :confidence_rating_in_percentage

      # @return [AssessmentSizingCriterion] Assessment sizing criterion.
      # Possible values include: 'PerformanceBased', 'AsOnPremises'
      attr_accessor :sizing_criterion

      # @return [DateTime] Time when the Azure Prices were queried. Date-Time
      # represented in ISO-8601 format.
      attr_accessor :prices_timestamp

      # @return [DateTime] Time when this project was created. Date-Time
      # represented in ISO-8601 format.
      attr_accessor :created_timestamp

      # @return [DateTime] Time when this project was last updated. Date-Time
      # represented in ISO-8601 format.
      attr_accessor :updated_timestamp

      # @return [Float] Monthly compute cost estimate for the machines that are
      # part of this assessment as a group, for a 31-day month.
      attr_accessor :monthly_compute_cost

      # @return [Float] Monthly network cost estimate for the machines that are
      # part of this assessment as a group, for a 31-day month.
      attr_accessor :monthly_bandwidth_cost

      # @return [Float] Monthly storage cost estimate for the machines that are
      # part of this assessment as a group, for a 31-day month.
      attr_accessor :monthly_storage_cost

      # @return [AssessmentStatus] Whether the assessment has been created and
      # is valid. Possible values include: 'Created', 'Updated', 'Running',
      # 'Completed', 'Invalid'
      attr_accessor :status

      # @return [Integer] Number of assessed machines part of this assessment.
      attr_accessor :number_of_machines


      #
      # Mapper for Assessment class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'Assessment',
          type: {
            name: 'Composite',
            class_name: 'Assessment',
            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'
                }
              },
              e_tag: {
                client_side_validation: true,
                required: false,
                serialized_name: 'eTag',
                type: {
                  name: 'String'
                }
              },
              type: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'type',
                type: {
                  name: 'String'
                }
              },
              azure_location: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.azureLocation',
                type: {
                  name: 'String'
                }
              },
              azure_offer_code: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.azureOfferCode',
                type: {
                  name: 'String'
                }
              },
              azure_pricing_tier: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.azurePricingTier',
                type: {
                  name: 'String'
                }
              },
              azure_storage_redundancy: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.azureStorageRedundancy',
                type: {
                  name: 'String'
                }
              },
              scaling_factor: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.scalingFactor',
                type: {
                  name: 'Double'
                }
              },
              percentile: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.percentile',
                type: {
                  name: 'String'
                }
              },
              time_range: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.timeRange',
                type: {
                  name: 'String'
                }
              },
              stage: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.stage',
                type: {
                  name: 'String'
                }
              },
              currency: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.currency',
                type: {
                  name: 'String'
                }
              },
              azure_hybrid_use_benefit: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.azureHybridUseBenefit',
                type: {
                  name: 'String'
                }
              },
              discount_percentage: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.discountPercentage',
                type: {
                  name: 'Double'
                }
              },
              confidence_rating_in_percentage: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.confidenceRatingInPercentage',
                type: {
                  name: 'Double'
                }
              },
              sizing_criterion: {
                client_side_validation: true,
                required: true,
                serialized_name: 'properties.sizingCriterion',
                type: {
                  name: 'String'
                }
              },
              prices_timestamp: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.pricesTimestamp',
                type: {
                  name: 'DateTime'
                }
              },
              created_timestamp: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.createdTimestamp',
                type: {
                  name: 'DateTime'
                }
              },
              updated_timestamp: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.updatedTimestamp',
                type: {
                  name: 'DateTime'
                }
              },
              monthly_compute_cost: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.monthlyComputeCost',
                type: {
                  name: 'Double'
                }
              },
              monthly_bandwidth_cost: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.monthlyBandwidthCost',
                type: {
                  name: 'Double'
                }
              },
              monthly_storage_cost: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.monthlyStorageCost',
                type: {
                  name: 'Double'
                }
              },
              status: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.status',
                type: {
                  name: 'String'
                }
              },
              number_of_machines: {
                client_side_validation: true,
                required: false,
                read_only: true,
                serialized_name: 'properties.numberOfMachines',
                type: {
                  name: 'Number'
                }
              }
            }
          }
        }
      end
    end
  end
end
