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

/**
 * An IPSec parameters for a virtual network gateway P2S connection.
 *
 */
class VpnClientIPsecParameters {
  /**
   * Create a VpnClientIPsecParameters.
   * @property {number} saLifeTimeSeconds The IPSec Security Association (also
   * called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
   * @property {number} saDataSizeKilobytes The IPSec Security Association
   * (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
   * @property {string} ipsecEncryption The IPSec encryption algorithm (IKE
   * phase 1). Possible values include: 'None', 'DES', 'DES3', 'AES128',
   * 'AES192', 'AES256', 'GCMAES128', 'GCMAES192', 'GCMAES256'
   * @property {string} ipsecIntegrity The IPSec integrity algorithm (IKE phase
   * 1). Possible values include: 'MD5', 'SHA1', 'SHA256', 'GCMAES128',
   * 'GCMAES192', 'GCMAES256'
   * @property {string} ikeEncryption The IKE encryption algorithm (IKE phase
   * 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256',
   * 'GCMAES256', 'GCMAES128'
   * @property {string} ikeIntegrity The IKE integrity algorithm (IKE phase 2).
   * Possible values include: 'MD5', 'SHA1', 'SHA256', 'SHA384', 'GCMAES256',
   * 'GCMAES128'
   * @property {string} dhGroup The DH Group used in IKE Phase 1 for initial
   * SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14',
   * 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
   * @property {string} pfsGroup The Pfs Group used in IKE Phase 2 for new
   * child SA. Possible values include: 'None', 'PFS1', 'PFS2', 'PFS2048',
   * 'ECP256', 'ECP384', 'PFS24', 'PFS14', 'PFSMM'
   */
  constructor() {
  }

  /**
   * Defines the metadata of VpnClientIPsecParameters
   *
   * @returns {object} metadata of VpnClientIPsecParameters
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'VpnClientIPsecParameters',
      type: {
        name: 'Composite',
        className: 'VpnClientIPsecParameters',
        modelProperties: {
          saLifeTimeSeconds: {
            required: true,
            serializedName: 'saLifeTimeSeconds',
            type: {
              name: 'Number'
            }
          },
          saDataSizeKilobytes: {
            required: true,
            serializedName: 'saDataSizeKilobytes',
            type: {
              name: 'Number'
            }
          },
          ipsecEncryption: {
            required: true,
            serializedName: 'ipsecEncryption',
            type: {
              name: 'String'
            }
          },
          ipsecIntegrity: {
            required: true,
            serializedName: 'ipsecIntegrity',
            type: {
              name: 'String'
            }
          },
          ikeEncryption: {
            required: true,
            serializedName: 'ikeEncryption',
            type: {
              name: 'String'
            }
          },
          ikeIntegrity: {
            required: true,
            serializedName: 'ikeIntegrity',
            type: {
              name: 'String'
            }
          },
          dhGroup: {
            required: true,
            serializedName: 'dhGroup',
            type: {
              name: 'String'
            }
          },
          pfsGroup: {
            required: true,
            serializedName: 'pfsGroup',
            type: {
              name: 'String'
            }
          }
        }
      }
    };
  }
}

module.exports = VpnClientIPsecParameters;
