/**
 * Forge SDK
 * The Forge Platform contains an expanding collection of web service components that can be used with Autodesk cloud-based products or your own technologies. Take advantage of Autodesk’s expertise in design and engineering.
 *
 * Contact: forge.help@autodesk.com
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

module.exports = (function () {
  'use strict';

  var ApiClient = require('../ApiClient');

  /**
   * The JobSvfOutputPayloadAdvanced model module.
   * @module model/JobSvfOutputPayloadAdvanced
   */

  /**
   * Constructs a <code>JobSvfOutputPayloadAdvanced</code> from a plain JavaScript object, optionally creating a new instance.
   * Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
   * @param {Object} data The plain JavaScript object bearing properties of interest.
   * @param {module:model/JobSvfOutputPayloadAdvanced} obj Optional instance to populate.
   * @return {module:model/JobSvfOutputPayloadAdvanced} The populated <code>JobSvfOutputPayloadAdvanced</code> instance.
   */
  var constructFromObject = function (data, obj) {
    if (data) {
      obj = obj || new exports();

      if (data.hasOwnProperty('conversionMethod'))
        obj.conversionMethod = ApiClient.convertToType(data.conversionMethod, 'String');
      if (data.hasOwnProperty('buildingStoreys'))
        obj.buildingStoreys = ApiClient.convertToType(data.buildingStoreys, 'String');
      if (data.hasOwnProperty('spaces'))
        obj.spaces = ApiClient.convertToType(data.spaces, 'String');
      if (data.hasOwnProperty('openingElements'))
        obj.openingElements = ApiClient.convertToType(data.openingElements, 'String');
      if (data.hasOwnProperty('generateMasterViews'))
        obj.generateMasterViews = ApiClient.convertToType(data.generateMasterViews, 'Boolean');
      if (data.hasOwnProperty('materialMode'))
        obj.materialMode = ApiClient.convertToType(data.materialMode, 'String');
      if (data.hasOwnProperty('hiddenObjects'))
        obj.hiddenObjects = ApiClient.convertToType(data.hiddenObjects, 'Boolean');
      if (data.hasOwnProperty('basicMaterialProperties'))
        obj.basicMaterialProperties = ApiClient.convertToType(data.basicMaterialProperties, 'Boolean');
      if (data.hasOwnProperty('autodeskMaterialProperties'))
        obj.autodeskMaterialProperties = ApiClient.convertToType(data.autodeskMaterialProperties, 'Boolean');
      if (data.hasOwnProperty('timelinerProperties'))
        obj.timelinerProperties = ApiClient.convertToType(data.timelinerProperties, 'Boolean');
    }
    return obj;
  };

  /**
   * Constructs a new <code>JobSvfOutputPayloadAdvanced</code>.
   * @alias module:model/JobSvfOutputPayloadAdvanced
   * @class
   * @param {Object} theData The plain JavaScript object bearing properties of interest.
   * @param {module:model/JobSvfOutputPayloadAdvanced} obj Optional instance to populate.
   */

  //  param conversionMethod { module: model / JobSvfOutputPayloadAdvanced.ConversionMethodEnum } An option to be specified when the input file type is IFC.
  //  param buildingStoreys { module: model / JobSvfOutputPayloadAdvanced.IfcOptionsEnum } An option to be specified when the input file type is IFC.
  //  param spaces { module: model / JobSvfOutputPayloadAdvanced.IfcOptionsEnum } An option to be specified when the input file type is IFC.
  //  param openingElements { module: model / JobSvfOutputPayloadAdvanced.IfcOptionsEnum } An option to be specified when the input file type is IFC.
  //  param generateMasterViews { Boolean } An option to be specified when the input file type is Revit.
  //  param materialMode { module: model / JobSvfOutputPayloadAdvanced.MaterialModeEnum } An option to be specified when the input file type is Revit.
  //  param hiddenObjects { Boolean } An option to be specified when the input file type is Navisworks.
  //  param basicMaterialProperties { Boolean } An option to be specified when the input file type is Navisworks.
  //  param autodeskMaterialProperties { Boolean } An option to be specified when the input file type is Navisworks.
  //  param timelinerProperties { Boolean } An option to be specified when the input file type is Navisworks.

  var exports = function (theData, obj) {
    var _this = this;

    // _this.conversionMethod = conversionMethod;
    // _this.buildingStoreys = buildingStoreys;
    // _this.spaces = spaces;
    // _this.openingElements = openingElements;
    // _this.generateMasterViews = generateMasterViews;
    // _this.materialMode = materialMode;
    // _this.hiddenObjects = hiddenObjects;
    // _this.basicMaterialProperties = basicMaterialProperties;
    // _this.autodeskMaterialProperties = autodeskMaterialProperties;
    // _this.timelinerProperties = timelinerProperties;

    return constructFromObject(theData, obj || _this);
  };

  /**
   * Constructs a <code>JobSvfOutputPayloadAdvanced</code> from a plain JavaScript object, optionally creating a new instance.
   * Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
   * @param {Object} data The plain JavaScript object bearing properties of interest.
   * @param {module:model/JobSvfOutputPayloadAdvanced} obj Optional instance to populate.
   * @return {module:model/JobSvfOutputPayloadAdvanced} The populated <code>JobSvfOutputPayloadAdvanced</code> instance.
   */
  exports.constructFromObject = constructFromObject;

  /**
   * An option to be specified when the input file type is IFC. Specifies what IFC loader to use during translation. Available options are:
   * - legacy - Use the Navisworks IFC loader.
   * - modern - Use the newer Revit IFC loader.
   * If both switchLoader and conversionMethod are specified, Model Derivative uses the conversionMethod parameter. If conversionMethod is not specified, Model Derivative uses the switchLoader parameter.
   * @member {module:model/JobSvfOutputPayloadAdvanced.ConversionMethodEnum} conversionMethod
   */
  exports.prototype.conversionMethod = undefined;

  /**
   * An option to be specified when the input file type is IFC. Specifies how stories are translated. Available options are:
   * - hide - (default) storeys are extracted but not visible by default.
   * - show - storeys are extracted and are visible by default.
   * - skip - storeys are not translated.
   * Note These options are applicable only when conversionMethod is set to modern.
   * @member {module:model/JobSvfOutputPayloadAdvanced.IfcOptionsEnum} buildingStoreys
   */
  exports.prototype.buildingStoreys = 'hide';

  /**
   * An option to be specified when the input file type is IFC. Specifies how spaces are translated. Available options are:
   * - hide - (default) spaces are translated but are not visible by default.
   * - show - spaces are translated and are visible by default.
   * - skip - spaces are not translated.
   * Note These options are applicable only when conversionMethod is set to modern.
   * @member {module:model/JobSvfOutputPayloadAdvanced.IfcOptionsEnum} spaces
   */
  exports.prototype.spaces = 'hide';

  /**
   * An option to be specified when the input file type is IFC. Specifies how openings are translated. Available options are:
   * - hide - (default) openings are translated but are not visible by default.
   * - show - openings are translated and are visible by default.
   * - skip - openings are not translated.
   * Note These options are applicable only when conversionMethod is set to modern.
   * @member {module:model/JobSvfOutputPayloadAdvanced.IfcOptionsEnum} openingElements
   */
  exports.prototype.openingElements = 'hide';

  /**
   * An option to be specified when the input file type is Revit. Generates master views when translating from the Revit input format to SVF. This option is ignored for all other input formats. This attribute defaults to false.
   * @member {Boolean} generateMasterViews
   * @default false
   */
  exports.prototype.generateMasterViews = false;

  /**
   * An option to be specified when the input file type is Revit. Specifies the materials to apply to the generated SVF derivatives. Available options are:
   * - auto - (Default) Use the current setting of the default view of the input file.
   * - basic - Use basic materials.
   * - autodesk - Use Autodesk materials.
   * @member {module:model/JobSvfOutputPayloadAdvanced.MaterialModeEnum} materialMode
   */
  exports.prototype.materialMode = 'auto';

  /**
   * An option to be specified when the input file type is Navisworks. true: Extract hidden objects from the input file. false: (Default) Do not extract hidden objects from the input file.
   * @member {Boolean} hiddenObjects
   * @default false
   */
  exports.prototype.hiddenObjects = false;

  /**
   * An option to be specified when the input file type is Navisworks. true: Extract properties for basic materials. false: (Default) Do not extract properties for basic materials.
   * @member {Boolean} basicMaterialProperties
   * @default false
   */
  exports.prototype.basicMaterialProperties = false;

  /**
   * An option to be specified when the input file type is Navisworks. true: Extract properties for Autodesk materials. false: (Default) Do not extract properties for Autodesk materials.
   * @member {Boolean} autodeskMaterialProperties
   * @default false
   */
  exports.prototype.autodeskMaterialProperties = false;

  /**
   * An option to be specified when the input file type is Navisworks. true: Extract timeliner properties. false: (Default) Do not extract timeliner properties.
   * @member {Boolean} timelinerProperties
   * @default false
   */
  exports.prototype.timelinerProperties = false;

  /**
   * Allowed values for the <code>materialMode</code> property.
   * @enum {String}
   * @readonly
   */
  exports.ConversionMethodEnum = {
    /**
     * value: "legacy"
     * @const
     */
    "legacy": "legacy",
    /**
     * value: "modern"
     * @const
     */
    "modern": "modern",
    /**
     * value: "v3"
     * @const
     */
    "v3": "v3",
  };

  /**
   * Allowed values for the <code>materialMode</code> property.
   * @enum {String}
   * @readonly
   */
  exports.MaterialModeEnum = {
    /**
     * value: "auto"
     * @const
     */
    "auto": "auto",
    /**
     * value: "basic"
     * @const
     */
    "basic": "basic",
    /**
     * value: "auto"
     * @const
     */
    "autodesk": "autodesk",
  };

  /**
   * Allowed values for the <code>buildingStoreys</code> <code>spaces</code> <code>openingElements</code> property.
   * @enum {String}
   * @readonly
   */
  exports.IfcOptionsEnum = {
    /**
     * value: "hide"
     * @const
     */
    "hide": "hide",
    /**
     * value: "show"
     * @const
     */
    "show": "show",
    /**
     * value: "skip"
     * @const
     */
    "skip": "skip",
  };

  return exports;
}());


