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

/**
 * Represents whether or not an app is cloneable.
 *
 */
class SiteCloneability {
  /**
   * Create a SiteCloneability.
   * @member {string} [result] Name of app. Possible values include:
   * 'Cloneable', 'PartiallyCloneable', 'NotCloneable'
   * @member {array} [blockingFeatures] List of features enabled on app that
   * prevent cloning.
   * @member {array} [unsupportedFeatures] List of features enabled on app that
   * are non-blocking but cannot be cloned. The app can still be cloned
   * but the features in this list will not be set up on cloned app.
   * @member {array} [blockingCharacteristics] List of blocking application
   * characteristics.
   */
  constructor() {
  }

  /**
   * Defines the metadata of SiteCloneability
   *
   * @returns {object} metadata of SiteCloneability
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'SiteCloneability',
      type: {
        name: 'Composite',
        className: 'SiteCloneability',
        modelProperties: {
          result: {
            required: false,
            serializedName: 'result',
            type: {
              name: 'Enum',
              allowedValues: [ 'Cloneable', 'PartiallyCloneable', 'NotCloneable' ]
            }
          },
          blockingFeatures: {
            required: false,
            serializedName: 'blockingFeatures',
            type: {
              name: 'Sequence',
              element: {
                  required: false,
                  serializedName: 'SiteCloneabilityCriterionElementType',
                  type: {
                    name: 'Composite',
                    className: 'SiteCloneabilityCriterion'
                  }
              }
            }
          },
          unsupportedFeatures: {
            required: false,
            serializedName: 'unsupportedFeatures',
            type: {
              name: 'Sequence',
              element: {
                  required: false,
                  serializedName: 'SiteCloneabilityCriterionElementType',
                  type: {
                    name: 'Composite',
                    className: 'SiteCloneabilityCriterion'
                  }
              }
            }
          },
          blockingCharacteristics: {
            required: false,
            serializedName: 'blockingCharacteristics',
            type: {
              name: 'Sequence',
              element: {
                  required: false,
                  serializedName: 'SiteCloneabilityCriterionElementType',
                  type: {
                    name: 'Composite',
                    className: 'SiteCloneabilityCriterion'
                  }
              }
            }
          }
        }
      }
    };
  }
}

module.exports = SiteCloneability;
