/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

'use strict';

const models = require('./index');

/**
 * An assessment created for a group in the Migration project.
 *
 * @extends models['BaseResource']
 */
class Assessment extends models['BaseResource'] {
  /**
   * Create a Assessment.
   * @member {string} [id] Path reference to this assessment.
   * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Migrate/projects/{projectName}/groups/{groupName}/assessment/{assessmentName}
   * @member {string} [name] Unique name of an assessment.
   * @member {string} [eTag] For optimistic concurrency control.
   * @member {string} [type] Type of the object =
   * [Microsoft.Migrate/projects/groups/assessments].
   * @member {string} 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'
   * @member {string} 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'
   * @member {string} azurePricingTier Pricing tier for Size evaluation.
   * Possible values include: 'Standard', 'Basic'
   * @member {string} azureStorageRedundancy Storage Redundancy type offered by
   * Azure. Possible values include: 'Unknown', 'LocallyRedundant',
   * 'ZoneRedundant', 'GeoRedundant', 'ReadAccessGeoRedundant'
   * @member {number} scalingFactor 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.
   * @member {string} percentile Percentile of performance data used to
   * recommend Azure size. Possible values include: 'Percentile50',
   * 'Percentile90', 'Percentile95', 'Percentile99'
   * @member {string} timeRange Time range of performance data used to
   * recommend a size. Possible values include: 'Day', 'Week', 'Month'
   * @member {string} stage User configurable setting that describes the status
   * of the assessment. Possible values include: 'InProgress', 'UnderReview',
   * 'Approved'
   * @member {string} 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'
   * @member {string} azureHybridUseBenefit AHUB discount on windows virtual
   * machines. Possible values include: 'Unknown', 'Yes', 'No'
   * @member {number} discountPercentage Custom discount percentage to be
   * applied on final costs. Can be in the range [0, 100].
   * @member {number} [confidenceRatingInPercentage] Confidence rating
   * percentage for assessment. Can be in the range [0, 100].
   * @member {string} sizingCriterion Assessment sizing criterion. Possible
   * values include: 'PerformanceBased', 'AsOnPremises'
   * @member {date} [pricesTimestamp] Time when the Azure Prices were queried.
   * Date-Time represented in ISO-8601 format.
   * @member {date} [createdTimestamp] Time when this project was created.
   * Date-Time represented in ISO-8601 format.
   * @member {date} [updatedTimestamp] Time when this project was last updated.
   * Date-Time represented in ISO-8601 format.
   * @member {number} [monthlyComputeCost] Monthly compute cost estimate for
   * the machines that are part of this assessment as a group, for a 31-day
   * month.
   * @member {number} [monthlyBandwidthCost] Monthly network cost estimate for
   * the machines that are part of this assessment as a group, for a 31-day
   * month.
   * @member {number} [monthlyStorageCost] Monthly storage cost estimate for
   * the machines that are part of this assessment as a group, for a 31-day
   * month.
   * @member {string} [status] Wheter the assessment has been created and is
   * valid. Possible values include: 'Created', 'Updated', 'Running',
   * 'Completed', 'Invalid'
   * @member {number} [numberOfMachines] Number of assessed machines part of
   * this assessment.
   */
  constructor() {
    super();
  }

  /**
   * Defines the metadata of Assessment
   *
   * @returns {object} metadata of Assessment
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'Assessment',
      type: {
        name: 'Composite',
        className: 'Assessment',
        modelProperties: {
          id: {
            required: false,
            readOnly: true,
            serializedName: 'id',
            type: {
              name: 'String'
            }
          },
          name: {
            required: false,
            readOnly: true,
            serializedName: 'name',
            type: {
              name: 'String'
            }
          },
          eTag: {
            required: false,
            serializedName: 'eTag',
            type: {
              name: 'String'
            }
          },
          type: {
            required: false,
            readOnly: true,
            serializedName: 'type',
            type: {
              name: 'String'
            }
          },
          azureLocation: {
            required: true,
            serializedName: 'properties.azureLocation',
            type: {
              name: 'String'
            }
          },
          azureOfferCode: {
            required: true,
            serializedName: 'properties.azureOfferCode',
            type: {
              name: 'String'
            }
          },
          azurePricingTier: {
            required: true,
            serializedName: 'properties.azurePricingTier',
            type: {
              name: 'String'
            }
          },
          azureStorageRedundancy: {
            required: true,
            serializedName: 'properties.azureStorageRedundancy',
            type: {
              name: 'String'
            }
          },
          scalingFactor: {
            required: true,
            serializedName: 'properties.scalingFactor',
            type: {
              name: 'Number'
            }
          },
          percentile: {
            required: true,
            serializedName: 'properties.percentile',
            type: {
              name: 'String'
            }
          },
          timeRange: {
            required: true,
            serializedName: 'properties.timeRange',
            type: {
              name: 'String'
            }
          },
          stage: {
            required: true,
            serializedName: 'properties.stage',
            type: {
              name: 'String'
            }
          },
          currency: {
            required: true,
            serializedName: 'properties.currency',
            type: {
              name: 'String'
            }
          },
          azureHybridUseBenefit: {
            required: true,
            serializedName: 'properties.azureHybridUseBenefit',
            type: {
              name: 'String'
            }
          },
          discountPercentage: {
            required: true,
            serializedName: 'properties.discountPercentage',
            type: {
              name: 'Number'
            }
          },
          confidenceRatingInPercentage: {
            required: false,
            readOnly: true,
            serializedName: 'properties.confidenceRatingInPercentage',
            type: {
              name: 'Number'
            }
          },
          sizingCriterion: {
            required: true,
            serializedName: 'properties.sizingCriterion',
            type: {
              name: 'String'
            }
          },
          pricesTimestamp: {
            required: false,
            readOnly: true,
            serializedName: 'properties.pricesTimestamp',
            type: {
              name: 'DateTime'
            }
          },
          createdTimestamp: {
            required: false,
            readOnly: true,
            serializedName: 'properties.createdTimestamp',
            type: {
              name: 'DateTime'
            }
          },
          updatedTimestamp: {
            required: false,
            readOnly: true,
            serializedName: 'properties.updatedTimestamp',
            type: {
              name: 'DateTime'
            }
          },
          monthlyComputeCost: {
            required: false,
            readOnly: true,
            serializedName: 'properties.monthlyComputeCost',
            type: {
              name: 'Number'
            }
          },
          monthlyBandwidthCost: {
            required: false,
            readOnly: true,
            serializedName: 'properties.monthlyBandwidthCost',
            type: {
              name: 'Number'
            }
          },
          monthlyStorageCost: {
            required: false,
            readOnly: true,
            serializedName: 'properties.monthlyStorageCost',
            type: {
              name: 'Number'
            }
          },
          status: {
            required: false,
            readOnly: true,
            serializedName: 'properties.status',
            type: {
              name: 'String'
            }
          },
          numberOfMachines: {
            required: false,
            readOnly: true,
            serializedName: 'properties.numberOfMachines',
            type: {
              name: 'Number'
            }
          }
        }
      }
    };
  }
}

module.exports = Assessment;
