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

/**
 * Represents the network adapter on device.
 *
 */
class NetworkAdapters {
  /**
   * Create a NetworkAdapters.
   * @member {string} interfaceId The ID of the network adapter. Possible
   * values include: 'Invalid', 'Data0', 'Data1', 'Data2', 'Data3', 'Data4',
   * 'Data5'
   * @member {string} netInterfaceStatus Value indicating status of network
   * adapter. Possible values include: 'Enabled', 'Disabled'
   * @member {boolean} [isDefault] Value indicating whether this instance is
   * default.
   * @member {string} iscsiAndCloudStatus Value indicating cloud and ISCSI
   * status of network adapter. Possible values include: 'Disabled',
   * 'IscsiEnabled', 'CloudEnabled', 'IscsiAndCloudEnabled'
   * @member {number} [speed] The speed of the network adapter.
   * @member {string} mode The mode of network adapter, either IPv4, IPv6 or
   * both. Possible values include: 'Invalid', 'IPV4', 'IPV6', 'BOTH'
   * @member {object} [nicIpv4Settings] The IPv4 configuration of the network
   * adapter.
   * @member {string} [nicIpv4Settings.ipv4Address] The IPv4 address of the
   * network adapter.
   * @member {string} [nicIpv4Settings.ipv4Netmask] The IPv4 netmask of the
   * network adapter.
   * @member {string} [nicIpv4Settings.ipv4Gateway] The IPv4 gateway of the
   * network adapter.
   * @member {string} [nicIpv4Settings.controller0Ipv4Address] The IPv4 address
   * of Controller0.
   * @member {string} [nicIpv4Settings.controller1Ipv4Address] The IPv4 address
   * of Controller1.
   * @member {object} [nicIpv6Settings] The IPv6 configuration of the network
   * adapter.
   * @member {string} [nicIpv6Settings.ipv6Address] The IPv6 address of the
   * network adapter.
   * @member {string} [nicIpv6Settings.ipv6Prefix] The IPv6 prefix of the
   * network adapter.
   * @member {string} [nicIpv6Settings.ipv6Gateway] The IPv6 gateway of the
   * network adapter.
   * @member {string} [nicIpv6Settings.controller0Ipv6Address] The IPv6 address
   * of Controller0.
   * @member {string} [nicIpv6Settings.controller1Ipv6Address] The IPv6 address
   * of Controller1.
   */
  constructor() {
  }

  /**
   * Defines the metadata of NetworkAdapters
   *
   * @returns {object} metadata of NetworkAdapters
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'NetworkAdapters',
      type: {
        name: 'Composite',
        className: 'NetworkAdapters',
        modelProperties: {
          interfaceId: {
            required: true,
            serializedName: 'interfaceId',
            type: {
              name: 'Enum',
              allowedValues: [ 'Invalid', 'Data0', 'Data1', 'Data2', 'Data3', 'Data4', 'Data5' ]
            }
          },
          netInterfaceStatus: {
            required: true,
            serializedName: 'netInterfaceStatus',
            type: {
              name: 'Enum',
              allowedValues: [ 'Enabled', 'Disabled' ]
            }
          },
          isDefault: {
            required: false,
            serializedName: 'isDefault',
            type: {
              name: 'Boolean'
            }
          },
          iscsiAndCloudStatus: {
            required: true,
            serializedName: 'iscsiAndCloudStatus',
            type: {
              name: 'Enum',
              allowedValues: [ 'Disabled', 'IscsiEnabled', 'CloudEnabled', 'IscsiAndCloudEnabled' ]
            }
          },
          speed: {
            required: false,
            serializedName: 'speed',
            type: {
              name: 'Number'
            }
          },
          mode: {
            required: true,
            serializedName: 'mode',
            type: {
              name: 'Enum',
              allowedValues: [ 'Invalid', 'IPV4', 'IPV6', 'BOTH' ]
            }
          },
          nicIpv4Settings: {
            required: false,
            serializedName: 'nicIpv4Settings',
            type: {
              name: 'Composite',
              className: 'NicIPv4'
            }
          },
          nicIpv6Settings: {
            required: false,
            serializedName: 'nicIpv6Settings',
            type: {
              name: 'Composite',
              className: 'NicIPv6'
            }
          }
        }
      }
    };
  }
}

module.exports = NetworkAdapters;
