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

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

var util = require('util');

/**
 * @class
 * Initializes a new instance of the LabVirtualMachine class.
 * @constructor
 * A virtual machine.
 * @member {string} [notes] The notes of the virtual machine.
 * 
 * @member {string} [ownerObjectId] The object identifier of the owner of the
 * virtual machine.
 * 
 * @member {string} [createdByUserId] The object identifier of the creator of
 * the virtual machine.
 * 
 * @member {string} [createdByUser] The email address of creator of the
 * virtual machine.
 * 
 * @member {string} [computeId] The resource identifier (Microsoft.Compute) of
 * the virtual machine.
 * 
 * @member {string} [customImageId] The custom image identifier of the virtual
 * machine.
 * 
 * @member {string} [osType] The OS type of the virtual machine.
 * 
 * @member {string} [size] The size of the virtual machine.
 * 
 * @member {string} [userName] The user name of the virtual machine.
 * 
 * @member {string} [password] The password of the virtual machine
 * administrator.
 * 
 * @member {string} [sshKey] The SSH key of the virtual machine administrator.
 * 
 * @member {boolean} [isAuthenticationWithSshKey] A value indicating whether
 * this virtual machine uses an SSH key for authentication.
 * 
 * @member {string} [fqdn] The fully-qualified domain name of the virtual
 * machine.
 * 
 * @member {string} [labSubnetName] The lab subnet name of the virtual machine.
 * 
 * @member {string} [labVirtualNetworkId] The lab virtual network identifier
 * of the virtual machine.
 * 
 * @member {boolean} [disallowPublicIpAddress] Indicates whether the virtual
 * machine is to be created without a public IP address.
 * 
 * @member {array} [artifacts] The artifacts to be installed on the virtual
 * machine.
 * 
 * @member {object} [artifactDeploymentStatus] The artifact deployment status
 * for the virtual machine.
 * 
 * @member {string} [artifactDeploymentStatus.deploymentStatus] The deployment
 * status of the artifact.
 * 
 * @member {number} [artifactDeploymentStatus.artifactsApplied] The total
 * count of the artifacts that were successfully applied.
 * 
 * @member {number} [artifactDeploymentStatus.totalArtifacts] The total count
 * of the artifacts that were tentatively applied.
 * 
 * @member {object} [galleryImageReference] The Microsoft Azure Marketplace
 * image reference of the virtual machine.
 * 
 * @member {string} [galleryImageReference.offer] The offer of the gallery
 * image.
 * 
 * @member {string} [galleryImageReference.publisher] The publisher of the
 * gallery image.
 * 
 * @member {string} [galleryImageReference.sku] The SKU of the gallery image.
 * 
 * @member {string} [galleryImageReference.osType] The OS type of the gallery
 * image.
 * 
 * @member {string} [galleryImageReference.version] The version of the gallery
 * image.
 * 
 * @member {string} [provisioningState] The provisioning status of the
 * resource.
 * 
 * @member {string} [id] The identifier of the resource.
 * 
 * @member {string} [name] The name of the resource.
 * 
 * @member {string} [type] The type of the resource.
 * 
 * @member {string} [location] The location of the resource.
 * 
 * @member {object} [tags] The tags of the resource.
 * 
 */
function LabVirtualMachine() {
  LabVirtualMachine['super_'].call(this);
}

util.inherits(LabVirtualMachine, models['BaseResource']);

/**
 * Defines the metadata of LabVirtualMachine
 *
 * @returns {object} metadata of LabVirtualMachine
 *
 */
LabVirtualMachine.prototype.mapper = function () {
  return {
    required: false,
    serializedName: 'LabVirtualMachine',
    type: {
      name: 'Composite',
      className: 'LabVirtualMachine',
      modelProperties: {
        notes: {
          required: false,
          serializedName: 'properties.notes',
          type: {
            name: 'String'
          }
        },
        ownerObjectId: {
          required: false,
          serializedName: 'properties.ownerObjectId',
          type: {
            name: 'String'
          }
        },
        createdByUserId: {
          required: false,
          serializedName: 'properties.createdByUserId',
          type: {
            name: 'String'
          }
        },
        createdByUser: {
          required: false,
          serializedName: 'properties.createdByUser',
          type: {
            name: 'String'
          }
        },
        computeId: {
          required: false,
          serializedName: 'properties.computeId',
          type: {
            name: 'String'
          }
        },
        customImageId: {
          required: false,
          serializedName: 'properties.customImageId',
          type: {
            name: 'String'
          }
        },
        osType: {
          required: false,
          serializedName: 'properties.osType',
          type: {
            name: 'String'
          }
        },
        size: {
          required: false,
          serializedName: 'properties.size',
          type: {
            name: 'String'
          }
        },
        userName: {
          required: false,
          serializedName: 'properties.userName',
          type: {
            name: 'String'
          }
        },
        password: {
          required: false,
          serializedName: 'properties.password',
          type: {
            name: 'String'
          }
        },
        sshKey: {
          required: false,
          serializedName: 'properties.sshKey',
          type: {
            name: 'String'
          }
        },
        isAuthenticationWithSshKey: {
          required: false,
          serializedName: 'properties.isAuthenticationWithSshKey',
          type: {
            name: 'Boolean'
          }
        },
        fqdn: {
          required: false,
          serializedName: 'properties.fqdn',
          type: {
            name: 'String'
          }
        },
        labSubnetName: {
          required: false,
          serializedName: 'properties.labSubnetName',
          type: {
            name: 'String'
          }
        },
        labVirtualNetworkId: {
          required: false,
          serializedName: 'properties.labVirtualNetworkId',
          type: {
            name: 'String'
          }
        },
        disallowPublicIpAddress: {
          required: false,
          serializedName: 'properties.disallowPublicIpAddress',
          type: {
            name: 'Boolean'
          }
        },
        artifacts: {
          required: false,
          serializedName: 'properties.artifacts',
          type: {
            name: 'Sequence',
            element: {
                required: false,
                serializedName: 'ArtifactInstallPropertiesElementType',
                type: {
                  name: 'Composite',
                  className: 'ArtifactInstallProperties'
                }
            }
          }
        },
        artifactDeploymentStatus: {
          required: false,
          serializedName: 'properties.artifactDeploymentStatus',
          type: {
            name: 'Composite',
            className: 'ArtifactDeploymentStatusProperties'
          }
        },
        galleryImageReference: {
          required: false,
          serializedName: 'properties.galleryImageReference',
          type: {
            name: 'Composite',
            className: 'GalleryImageReference'
          }
        },
        provisioningState: {
          required: false,
          serializedName: 'properties.provisioningState',
          type: {
            name: 'String'
          }
        },
        id: {
          required: false,
          serializedName: 'id',
          type: {
            name: 'String'
          }
        },
        name: {
          required: false,
          serializedName: 'name',
          type: {
            name: 'String'
          }
        },
        type: {
          required: false,
          serializedName: 'type',
          type: {
            name: 'String'
          }
        },
        location: {
          required: false,
          serializedName: 'location',
          type: {
            name: 'String'
          }
        },
        tags: {
          required: false,
          serializedName: 'tags',
          type: {
            name: 'Dictionary',
            value: {
                required: false,
                serializedName: 'StringElementType',
                type: {
                  name: 'String'
                }
            }
          }
        }
      }
    }
  };
};

module.exports = LabVirtualMachine;
