/*
 * 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 0.16.0.0
 * 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 IPConfiguration class.
 * @constructor
 * IPConfiguration
 * @member {string} [privateIPAddress] Gets or sets the privateIPAddress of
 * the IP Configuration
 * 
 * @member {string} [privateIPAllocationMethod] Gets or sets PrivateIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {object} [subnet] Gets or sets the reference of the subnet resource
 * 
 * @member {string} [subnet.addressPrefix] Gets or sets Address prefix for the
 * subnet.
 * 
 * @member {object} [subnet.networkSecurityGroup] Gets or sets the reference
 * of the NetworkSecurityGroup resource
 * 
 * @member {array} [subnet.networkSecurityGroup.securityRules] Gets or sets
 * Security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.defaultSecurityRules] Gets or
 * sets Default security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.networkInterfaces] Gets
 * collection of references to Network Interfaces
 * 
 * @member {array} [subnet.networkSecurityGroup.subnets] Gets collection of
 * references to subnets
 * 
 * @member {string} [subnet.networkSecurityGroup.resourceGuid] Gets or sets
 * resource guid property of the network security group resource
 * 
 * @member {string} [subnet.networkSecurityGroup.provisioningState] Gets or
 * sets Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.networkSecurityGroup.etag] Gets a unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [subnet.routeTable] Gets or sets the reference of the
 * RouteTable resource
 * 
 * @member {array} [subnet.routeTable.routes] Gets or sets Routes in a Route
 * Table
 * 
 * @member {array} [subnet.routeTable.subnets] Gets collection of references
 * to subnets
 * 
 * @member {string} [subnet.routeTable.provisioningState] Gets or sets
 * Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.routeTable.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {array} [subnet.ipConfigurations] Gets array of references to the
 * network interface IP configurations using subnet
 * 
 * @member {string} [subnet.provisioningState] Gets or sets Provisioning state
 * of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.name] Gets name of the resource that is unique
 * within a resource group. This name can be used to access the resource
 * 
 * @member {string} [subnet.etag] A unique read-only string that changes
 * whenever the resource is updated
 * 
 * @member {object} [publicIPAddress] Gets or sets the reference of the
 * PublicIP resource
 * 
 * @member {string} [publicIPAddress.publicIPAllocationMethod] Gets or sets
 * PublicIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {string} [publicIPAddress.publicIPAddressVersion] Gets or sets
 * PublicIP address version (IPv4/IPv6). Possible values include: 'IPv4',
 * 'IPv6'
 * 
 * @member {object} [publicIPAddress.ipConfiguration]
 * 
 * @member {object} [publicIPAddress.dnsSettings] Gets or sets FQDN of the DNS
 * record associated with the public IP address
 * 
 * @member {string} [publicIPAddress.dnsSettings.domainNameLabel] Gets or sets
 * the Domain name label.The concatenation of the domain name label and the
 * regionalized DNS zone make up the fully qualified domain name associated
 * with the public IP address. If a domain name label is specified, an A DNS
 * record is created for the public IP in the Microsoft Azure DNS system.
 * 
 * @member {string} [publicIPAddress.dnsSettings.fqdn] Gets the FQDN, Fully
 * qualified domain name of the A DNS record associated with the public IP.
 * This is the concatenation of the domainNameLabel and the regionalized DNS
 * zone.
 * 
 * @member {string} [publicIPAddress.dnsSettings.reverseFqdn] Gets or Sests
 * the Reverse FQDN. A user-visible, fully qualified domain name that
 * resolves to this public IP address. If the reverseFqdn is specified, then
 * a PTR DNS record is created pointing from the IP address in the
 * in-addr.arpa domain to the reverse FQDN.
 * 
 * @member {string} [publicIPAddress.ipAddress]
 * 
 * @member {number} [publicIPAddress.idleTimeoutInMinutes] Gets or sets the
 * Idletimeout of the public IP address
 * 
 * @member {string} [publicIPAddress.resourceGuid] Gets or sets resource guid
 * property of the PublicIP resource
 * 
 * @member {string} [publicIPAddress.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.etag] Gets a unique read-only string that
 * changes whenever the resource is updated
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
function IPConfiguration() {
  IPConfiguration['super_'].call(this);
}

util.inherits(IPConfiguration, models['SubResource']);

/**
 * Defines the metadata of IPConfiguration
 *
 * @returns {object} metadata of IPConfiguration
 *
 */
IPConfiguration.prototype.mapper = function () {
  return {
    required: false,
    serializedName: 'IPConfiguration',
    type: {
      name: 'Composite',
      className: 'IPConfiguration',
      modelProperties: {
        id: {
          required: false,
          serializedName: 'id',
          type: {
            name: 'String'
          }
        },
        privateIPAddress: {
          required: false,
          serializedName: 'properties.privateIPAddress',
          type: {
            name: 'String'
          }
        },
        privateIPAllocationMethod: {
          required: false,
          serializedName: 'properties.privateIPAllocationMethod',
          type: {
            name: 'String'
          }
        },
        subnet: {
          required: false,
          serializedName: 'properties.subnet',
          type: {
            name: 'Composite',
            className: 'Subnet'
          }
        },
        publicIPAddress: {
          required: false,
          serializedName: 'properties.publicIPAddress',
          type: {
            name: 'Composite',
            className: 'PublicIPAddress'
          }
        },
        provisioningState: {
          required: false,
          serializedName: 'properties.provisioningState',
          type: {
            name: 'String'
          }
        },
        name: {
          required: false,
          serializedName: 'name',
          type: {
            name: 'String'
          }
        },
        etag: {
          required: false,
          serializedName: 'etag',
          type: {
            name: 'String'
          }
        }
      }
    }
  };
};

module.exports = IPConfiguration;
