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

/**
 * A SQL virtual machine group.
 *
 * @extends models['TrackedResource']
 */
class SqlVirtualMachineGroup extends models['TrackedResource'] {
  /**
   * Create a SqlVirtualMachineGroup.
   * @property {string} [provisioningState] Provisioning state to track the
   * aysnc operation status.
   * @property {string} [sqlImageOffer] SQL image offer. Examples may include
   * SQL2016-WS2016, SQL2017-WS2016.
   * @property {string} [sqlImageSku] SQL image sku. Possible values include:
   * 'Developer', 'Enterprise'
   * @property {string} [scaleType] Scale type. Possible values include: 'HA'
   * @property {string} [clusterManagerType] Type of cluster manager: Windows
   * Server Failover Cluster (WSFC), implied by the scale type of the group and
   * the OS type. Possible values include: 'WSFC'
   * @property {string} [clusterConfiguration] Cluster type. Possible values
   * include: 'Domainful'
   * @property {object} [wsfcDomainProfile] Cluster Active Directory domain
   * profile.
   * @property {string} [wsfcDomainProfile.domainFqdn] Fully qualified name of
   * the domain.
   * @property {string} [wsfcDomainProfile.ouPath] Organizational Unit path in
   * which the nodes and cluster will be present.
   * @property {string} [wsfcDomainProfile.clusterBootstrapAccount] Account
   * name used for creating cluster (at minimum needs permissions to 'Create
   * Computer Objects' in domain).
   * @property {string} [wsfcDomainProfile.clusterOperatorAccount] Account name
   * used for operating cluster i.e. will be part of administrators group on
   * all the participating virtual machines in the cluster.
   * @property {string} [wsfcDomainProfile.sqlServiceAccount] Account name
   * under which SQL service will run on all participating SQL virtual machines
   * in the cluster.
   * @property {string} [wsfcDomainProfile.fileShareWitnessPath] Optional path
   * for fileshare witness.
   * @property {string} [wsfcDomainProfile.storageAccountUrl] Fully qualified
   * ARM resource id of the witness storage account.
   * @property {string} [wsfcDomainProfile.storageAccountPrimaryKey] Primary
   * key of the witness storage account.
   */
  constructor() {
    super();
  }

  /**
   * Defines the metadata of SqlVirtualMachineGroup
   *
   * @returns {object} metadata of SqlVirtualMachineGroup
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'SqlVirtualMachineGroup',
      type: {
        name: 'Composite',
        className: 'SqlVirtualMachineGroup',
        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: true,
            serializedName: 'location',
            type: {
              name: 'String'
            }
          },
          tags: {
            required: false,
            serializedName: 'tags',
            type: {
              name: 'Dictionary',
              value: {
                  required: false,
                  serializedName: 'StringElementType',
                  type: {
                    name: 'String'
                  }
              }
            }
          },
          provisioningState: {
            required: false,
            readOnly: true,
            serializedName: 'properties.provisioningState',
            type: {
              name: 'String'
            }
          },
          sqlImageOffer: {
            required: false,
            serializedName: 'properties.sqlImageOffer',
            type: {
              name: 'String'
            }
          },
          sqlImageSku: {
            required: false,
            serializedName: 'properties.sqlImageSku',
            type: {
              name: 'String'
            }
          },
          scaleType: {
            required: false,
            readOnly: true,
            serializedName: 'properties.scaleType',
            type: {
              name: 'String'
            }
          },
          clusterManagerType: {
            required: false,
            readOnly: true,
            serializedName: 'properties.clusterManagerType',
            type: {
              name: 'String'
            }
          },
          clusterConfiguration: {
            required: false,
            readOnly: true,
            serializedName: 'properties.clusterConfiguration',
            type: {
              name: 'String'
            }
          },
          wsfcDomainProfile: {
            required: false,
            serializedName: 'properties.wsfcDomainProfile',
            type: {
              name: 'Composite',
              className: 'WsfcDomainProfile'
            }
          }
        }
      }
    };
  }
}

module.exports = SqlVirtualMachineGroup;
