/*
 * 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';

/**
 * Autoscale profile.
 *
 */
class AutoscaleProfile {
  /**
   * Create a AutoscaleProfile.
   * @property {string} name the name of the profile.
   * @property {object} capacity the number of instances that can be used
   * during this profile.
   * @property {string} [capacity.minimum] the minimum number of instances for
   * the resource.
   * @property {string} [capacity.maximum] the maximum number of instances for
   * the resource. The actual maximum number of instances is limited by the
   * cores that are available in the subscription.
   * @property {string} [capacity.default] the number of instances that will be
   * set if metrics are not available for evaluation. The default is only used
   * if the current instance count is lower than the default.
   * @property {array} rules the collection of rules that provide the triggers
   * and parameters for the scaling action. A maximum of 10 rules can be
   * specified.
   * @property {object} [fixedDate] the specific date-time for the profile.
   * This element is not used if the Recurrence element is used.
   * @property {string} [fixedDate.timeZone] the timezone of the start and end
   * times for the profile. Some examples of valid time zones are: Dateline
   * Standard Time, UTC-11, Hawaiian Standard Time, Alaskan Standard Time,
   * Pacific Standard Time (Mexico), Pacific Standard Time, US Mountain
   * Standard Time, Mountain Standard Time (Mexico), Mountain Standard Time,
   * Central America Standard Time, Central Standard Time, Central Standard
   * Time (Mexico), Canada Central Standard Time, SA Pacific Standard Time,
   * Eastern Standard Time, US Eastern Standard Time, Venezuela Standard Time,
   * Paraguay Standard Time, Atlantic Standard Time, Central Brazilian Standard
   * Time, SA Western Standard Time, Pacific SA Standard Time, Newfoundland
   * Standard Time, E. South America Standard Time, Argentina Standard Time, SA
   * Eastern Standard Time, Greenland Standard Time, Montevideo Standard Time,
   * Bahia Standard Time, UTC-02, Mid-Atlantic Standard Time, Azores Standard
   * Time, Cape Verde Standard Time, Morocco Standard Time, UTC, GMT Standard
   * Time, Greenwich Standard Time, W. Europe Standard Time, Central Europe
   * Standard Time, Romance Standard Time, Central European Standard Time, W.
   * Central Africa Standard Time, Namibia Standard Time, Jordan Standard Time,
   * GTB Standard Time, Middle East Standard Time, Egypt Standard Time, Syria
   * Standard Time, E. Europe Standard Time, South Africa Standard Time, FLE
   * Standard Time, Turkey Standard Time, Israel Standard Time, Kaliningrad
   * Standard Time, Libya Standard Time, Arabic Standard Time, Arab Standard
   * Time, Belarus Standard Time, Russian Standard Time, E. Africa Standard
   * Time, Iran Standard Time, Arabian Standard Time, Azerbaijan Standard Time,
   * Russia Time Zone 3, Mauritius Standard Time, Georgian Standard Time,
   * Caucasus Standard Time, Afghanistan Standard Time, West Asia Standard
   * Time, Ekaterinburg Standard Time, Pakistan Standard Time, India Standard
   * Time, Sri Lanka Standard Time, Nepal Standard Time, Central Asia Standard
   * Time, Bangladesh Standard Time, N. Central Asia Standard Time, Myanmar
   * Standard Time, SE Asia Standard Time, North Asia Standard Time, China
   * Standard Time, North Asia East Standard Time, Singapore Standard Time, W.
   * Australia Standard Time, Taipei Standard Time, Ulaanbaatar Standard Time,
   * Tokyo Standard Time, Korea Standard Time, Yakutsk Standard Time, Cen.
   * Australia Standard Time, AUS Central Standard Time, E. Australia Standard
   * Time, AUS Eastern Standard Time, West Pacific Standard Time, Tasmania
   * Standard Time, Magadan Standard Time, Vladivostok Standard Time, Russia
   * Time Zone 10, Central Pacific Standard Time, Russia Time Zone 11, New
   * Zealand Standard Time, UTC+12, Fiji Standard Time, Kamchatka Standard
   * Time, Tonga Standard Time, Samoa Standard Time, Line Islands Standard Time
   * @property {date} [fixedDate.start] the start time for the profile in ISO
   * 8601 format.
   * @property {date} [fixedDate.end] the end time for the profile in ISO 8601
   * format.
   * @property {object} [recurrence] the repeating times at which this profile
   * begins. This element is not used if the FixedDate element is used.
   * @property {string} [recurrence.frequency] the recurrence frequency. How
   * often the schedule profile should take effect. This value must be Week,
   * meaning each week will have the same set of profiles. For example, to set
   * a daily schedule, set **schedule** to every day of the week. The frequency
   * property specifies that the schedule is repeated weekly. Possible values
   * include: 'None', 'Second', 'Minute', 'Hour', 'Day', 'Week', 'Month',
   * 'Year'
   * @property {object} [recurrence.schedule] the scheduling constraints for
   * when the profile begins.
   * @property {string} [recurrence.schedule.timeZone] the timezone for the
   * hours of the profile. Some examples of valid time zones are: Dateline
   * Standard Time, UTC-11, Hawaiian Standard Time, Alaskan Standard Time,
   * Pacific Standard Time (Mexico), Pacific Standard Time, US Mountain
   * Standard Time, Mountain Standard Time (Mexico), Mountain Standard Time,
   * Central America Standard Time, Central Standard Time, Central Standard
   * Time (Mexico), Canada Central Standard Time, SA Pacific Standard Time,
   * Eastern Standard Time, US Eastern Standard Time, Venezuela Standard Time,
   * Paraguay Standard Time, Atlantic Standard Time, Central Brazilian Standard
   * Time, SA Western Standard Time, Pacific SA Standard Time, Newfoundland
   * Standard Time, E. South America Standard Time, Argentina Standard Time, SA
   * Eastern Standard Time, Greenland Standard Time, Montevideo Standard Time,
   * Bahia Standard Time, UTC-02, Mid-Atlantic Standard Time, Azores Standard
   * Time, Cape Verde Standard Time, Morocco Standard Time, UTC, GMT Standard
   * Time, Greenwich Standard Time, W. Europe Standard Time, Central Europe
   * Standard Time, Romance Standard Time, Central European Standard Time, W.
   * Central Africa Standard Time, Namibia Standard Time, Jordan Standard Time,
   * GTB Standard Time, Middle East Standard Time, Egypt Standard Time, Syria
   * Standard Time, E. Europe Standard Time, South Africa Standard Time, FLE
   * Standard Time, Turkey Standard Time, Israel Standard Time, Kaliningrad
   * Standard Time, Libya Standard Time, Arabic Standard Time, Arab Standard
   * Time, Belarus Standard Time, Russian Standard Time, E. Africa Standard
   * Time, Iran Standard Time, Arabian Standard Time, Azerbaijan Standard Time,
   * Russia Time Zone 3, Mauritius Standard Time, Georgian Standard Time,
   * Caucasus Standard Time, Afghanistan Standard Time, West Asia Standard
   * Time, Ekaterinburg Standard Time, Pakistan Standard Time, India Standard
   * Time, Sri Lanka Standard Time, Nepal Standard Time, Central Asia Standard
   * Time, Bangladesh Standard Time, N. Central Asia Standard Time, Myanmar
   * Standard Time, SE Asia Standard Time, North Asia Standard Time, China
   * Standard Time, North Asia East Standard Time, Singapore Standard Time, W.
   * Australia Standard Time, Taipei Standard Time, Ulaanbaatar Standard Time,
   * Tokyo Standard Time, Korea Standard Time, Yakutsk Standard Time, Cen.
   * Australia Standard Time, AUS Central Standard Time, E. Australia Standard
   * Time, AUS Eastern Standard Time, West Pacific Standard Time, Tasmania
   * Standard Time, Magadan Standard Time, Vladivostok Standard Time, Russia
   * Time Zone 10, Central Pacific Standard Time, Russia Time Zone 11, New
   * Zealand Standard Time, UTC+12, Fiji Standard Time, Kamchatka Standard
   * Time, Tonga Standard Time, Samoa Standard Time, Line Islands Standard Time
   * @property {array} [recurrence.schedule.days] the collection of days that
   * the profile takes effect on. Possible values are Sunday through Saturday.
   * @property {array} [recurrence.schedule.hours] A collection of hours that
   * the profile takes effect on. Values supported are 0 to 23 on the 24-hour
   * clock (AM/PM times are not supported).
   * @property {array} [recurrence.schedule.minutes] A collection of minutes at
   * which the profile takes effect at.
   */
  constructor() {
  }

  /**
   * Defines the metadata of AutoscaleProfile
   *
   * @returns {object} metadata of AutoscaleProfile
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'AutoscaleProfile',
      type: {
        name: 'Composite',
        className: 'AutoscaleProfile',
        modelProperties: {
          name: {
            required: true,
            serializedName: 'name',
            type: {
              name: 'String'
            }
          },
          capacity: {
            required: true,
            serializedName: 'capacity',
            type: {
              name: 'Composite',
              className: 'ScaleCapacity'
            }
          },
          rules: {
            required: true,
            serializedName: 'rules',
            type: {
              name: 'Sequence',
              element: {
                  required: false,
                  serializedName: 'ScaleRuleElementType',
                  type: {
                    name: 'Composite',
                    className: 'ScaleRule'
                  }
              }
            }
          },
          fixedDate: {
            required: false,
            serializedName: 'fixedDate',
            type: {
              name: 'Composite',
              className: 'TimeWindow'
            }
          },
          recurrence: {
            required: false,
            serializedName: 'recurrence',
            type: {
              name: 'Composite',
              className: 'Recurrence'
            }
          }
        }
      }
    };
  }
}

module.exports = AutoscaleProfile;
