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

/**
 * HANA instance info on Azure (ARM properties and HANA properties)
 *
 * @extends models['Resource']
 */
class HanaInstance extends models['Resource'] {
  /**
   * Create a HanaInstance.
   * @property {object} [hardwareProfile] Specifies the hardware settings for
   * the HANA instance.
   * @property {string} [hardwareProfile.hardwareType] Name of the hardware
   * type (vendor and/or their product name). Possible values include:
   * 'Cisco_UCS', 'HPE'
   * @property {string} [hardwareProfile.hanaInstanceSize] Specifies the HANA
   * instance SKU. Possible values include: 'S72m', 'S144m', 'S72', 'S144',
   * 'S192', 'S192m', 'S192xm', 'S96', 'S384', 'S384m', 'S384xm', 'S384xxm',
   * 'S576m', 'S576xm', 'S768', 'S768m', 'S768xm', 'S960m'
   * @property {object} [storageProfile] Specifies the storage settings for the
   * HANA instance disks.
   * @property {string} [storageProfile.nfsIpAddress] IP Address to connect to
   * storage.
   * @property {array} [storageProfile.osDisks] Specifies information about the
   * operating system disk used by the hana instance.
   * @property {object} [osProfile] Specifies the operating system settings for
   * the HANA instance.
   * @property {string} [osProfile.computerName] Specifies the host OS name of
   * the HANA instance.
   * @property {string} [osProfile.osType] This property allows you to specify
   * the type of the OS.
   * @property {string} [osProfile.version] Specifies version of operating
   * system.
   * @property {object} [networkProfile] Specifies the network settings for the
   * HANA instance.
   * @property {array} [networkProfile.networkInterfaces] Specifies the network
   * interfaces for the HANA instance.
   * @property {string} [networkProfile.circuitId] Specifies the circuit id for
   * connecting to express route.
   * @property {string} [hanaInstanceId] Specifies the HANA instance unique ID.
   * @property {string} [powerState] Resource power state. Possible values
   * include: 'starting', 'started', 'stopping', 'stopped', 'restarting',
   * 'unknown'
   * @property {string} [proximityPlacementGroup] Resource proximity placement
   * group
   * @property {string} [hwRevision] Hardware revision of a HANA instance
   */
  constructor() {
    super();
  }

  /**
   * Defines the metadata of HanaInstance
   *
   * @returns {object} metadata of HanaInstance
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'HanaInstance',
      type: {
        name: 'Composite',
        className: 'HanaInstance',
        modelProperties: {
          id: {
            required: false,
            readOnly: true,
            serializedName: 'id',
            type: {
              name: 'String'
            }
          },
          name: {
            required: false,
            readOnly: true,
            serializedName: 'name',
            type: {
              name: 'String'
            }
          },
          type: {
            required: false,
            readOnly: true,
            serializedName: 'type',
            type: {
              name: 'String'
            }
          },
          location: {
            required: false,
            readOnly: true,
            serializedName: 'location',
            type: {
              name: 'String'
            }
          },
          tags: {
            required: false,
            readOnly: true,
            serializedName: 'tags',
            type: {
              name: 'Dictionary',
              value: {
                  required: false,
                  serializedName: 'StringElementType',
                  type: {
                    name: 'String'
                  }
              }
            }
          },
          hardwareProfile: {
            required: false,
            serializedName: 'properties.hardwareProfile',
            type: {
              name: 'Composite',
              className: 'HardwareProfile'
            }
          },
          storageProfile: {
            required: false,
            serializedName: 'properties.storageProfile',
            type: {
              name: 'Composite',
              className: 'StorageProfile'
            }
          },
          osProfile: {
            required: false,
            serializedName: 'properties.osProfile',
            type: {
              name: 'Composite',
              className: 'OSProfile'
            }
          },
          networkProfile: {
            required: false,
            serializedName: 'properties.networkProfile',
            type: {
              name: 'Composite',
              className: 'NetworkProfile'
            }
          },
          hanaInstanceId: {
            required: false,
            readOnly: true,
            serializedName: 'properties.hanaInstanceId',
            type: {
              name: 'String'
            }
          },
          powerState: {
            required: false,
            readOnly: true,
            serializedName: 'properties.powerState',
            type: {
              name: 'String'
            }
          },
          proximityPlacementGroup: {
            required: false,
            readOnly: true,
            serializedName: 'properties.proximityPlacementGroup',
            type: {
              name: 'String'
            }
          },
          hwRevision: {
            required: false,
            readOnly: true,
            serializedName: 'properties.hwRevision',
            type: {
              name: 'String'
            }
          }
        }
      }
    };
  }
}

module.exports = HanaInstance;
