=begin
#CLOUD API

#IONOS Enterprise-grade Infrastructure as a Service (IaaS) solutions can be managed through the Cloud API, in addition or as an alternative to the \"Data Center Designer\" (DCD) browser-based tool.    Both methods employ consistent concepts and features, deliver similar power and flexibility, and can be used to perform a multitude of management tasks, including adding servers, volumes, configuring networks, and so on.

The version of the OpenAPI document: 6.0

Generated by: https://openapi-generator.tech
OpenAPI Generator version: 5.2.1-SNAPSHOT

=end

require 'cgi'

module Ionoscloud
  class NetworkInterfacesApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end
    # Delete NICs
    # Remove the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth=0: Only direct properties are included; children (servers and other elements) are not included.  - depth=1: Direct properties and children references are included.  - depth=2: Direct properties and children properties are included.  - depth=3: Direct properties and children properties and children's children are included.  - depth=... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [nil]
    def datacenters_servers_nics_delete(datacenter_id, server_id, nic_id, opts = {})
      datacenters_servers_nics_delete_with_http_info(datacenter_id, server_id, nic_id, opts)
      nil
    end

    # Delete NICs
    # Remove the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth=0: Only direct properties are included; children (servers and other elements) are not included.  - depth=1: Direct properties and children references are included.  - depth=2: Direct properties and children properties are included.  - depth=3: Direct properties and children properties and children's children are included.  - depth=... and so on
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
    def datacenters_servers_nics_delete_with_http_info(datacenter_id, server_id, nic_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: NetworkInterfacesApi.datacenters_servers_nics_delete ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling NetworkInterfacesApi.datacenters_servers_nics_delete"
      end
      # verify the required parameter 'server_id' is set
      if @api_client.config.client_side_validation && server_id.nil?
        fail ArgumentError, "Missing the required parameter 'server_id' when calling NetworkInterfacesApi.datacenters_servers_nics_delete"
      end
      # verify the required parameter 'nic_id' is set
      if @api_client.config.client_side_validation && nic_id.nil?
        fail ArgumentError, "Missing the required parameter 'nic_id' when calling NetworkInterfacesApi.datacenters_servers_nics_delete"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_delete, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_delete, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/servers/{serverId}/nics/{nicId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'serverId' + '}', CGI.escape(server_id.to_s)).sub('{' + 'nicId' + '}', CGI.escape(nic_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type]

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"NetworkInterfacesApi.datacenters_servers_nics_delete",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NetworkInterfacesApi#datacenters_servers_nics_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve NICs
    # Retrieve the properties of the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Nic]
    def datacenters_servers_nics_find_by_id(datacenter_id, server_id, nic_id, opts = {})
      data, _status_code, _headers = datacenters_servers_nics_find_by_id_with_http_info(datacenter_id, server_id, nic_id, opts)
      data
    end

    # Retrieve NICs
    # Retrieve the properties of the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(Nic, Integer, Hash)>] Nic data, response status code and response headers
    def datacenters_servers_nics_find_by_id_with_http_info(datacenter_id, server_id, nic_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: NetworkInterfacesApi.datacenters_servers_nics_find_by_id ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling NetworkInterfacesApi.datacenters_servers_nics_find_by_id"
      end
      # verify the required parameter 'server_id' is set
      if @api_client.config.client_side_validation && server_id.nil?
        fail ArgumentError, "Missing the required parameter 'server_id' when calling NetworkInterfacesApi.datacenters_servers_nics_find_by_id"
      end
      # verify the required parameter 'nic_id' is set
      if @api_client.config.client_side_validation && nic_id.nil?
        fail ArgumentError, "Missing the required parameter 'nic_id' when calling NetworkInterfacesApi.datacenters_servers_nics_find_by_id"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_find_by_id, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_find_by_id, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/servers/{serverId}/nics/{nicId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'serverId' + '}', CGI.escape(server_id.to_s)).sub('{' + 'nicId' + '}', CGI.escape(nic_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Nic'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"NetworkInterfacesApi.datacenters_servers_nics_find_by_id",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NetworkInterfacesApi#datacenters_servers_nics_find_by_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List NICs
    # List all NICs, attached to the specified server.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @option opts [Integer] :offset The first element (from the complete list of the elements) to include in the response (used together with &lt;b&gt;&lt;i&gt;limit&lt;/i&gt;&lt;/b&gt; for pagination). (default to 0)
    # @option opts [Integer] :limit The maximum number of elements to return (use together with offset for pagination). (default to 1000)
    # @return [Nics]
    def datacenters_servers_nics_get(datacenter_id, server_id, opts = {})
      data, _status_code, _headers = datacenters_servers_nics_get_with_http_info(datacenter_id, server_id, opts)
      data
    end

    # List NICs
    # List all NICs, attached to the specified server.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @option opts [Integer] :offset The first element (from the complete list of the elements) to include in the response (used together with &lt;b&gt;&lt;i&gt;limit&lt;/i&gt;&lt;/b&gt; for pagination).
    # @option opts [Integer] :limit The maximum number of elements to return (use together with offset for pagination).
    # @return [Array<(Nics, Integer, Hash)>] Nics data, response status code and response headers
    def datacenters_servers_nics_get_with_http_info(datacenter_id, server_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: NetworkInterfacesApi.datacenters_servers_nics_get ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling NetworkInterfacesApi.datacenters_servers_nics_get"
      end
      # verify the required parameter 'server_id' is set
      if @api_client.config.client_side_validation && server_id.nil?
        fail ArgumentError, "Missing the required parameter 'server_id' when calling NetworkInterfacesApi.datacenters_servers_nics_get"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_get, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_get, must be greater than or equal to 0.'
      end

      if @api_client.config.client_side_validation && !opts[:'offset'].nil? && opts[:'offset'] < 0
        fail ArgumentError, 'invalid value for "opts[:"offset"]" when calling NetworkInterfacesApi.datacenters_servers_nics_get, must be greater than or equal to 0.'
      end

      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 10000
        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling NetworkInterfacesApi.datacenters_servers_nics_get, must be smaller than or equal to 10000.'
      end

      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling NetworkInterfacesApi.datacenters_servers_nics_get, must be greater than or equal to 1.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/servers/{serverId}/nics'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'serverId' + '}', CGI.escape(server_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?
      query_params[:'offset'] = opts[:'offset'] if !opts[:'offset'].nil?
      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Nics'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"NetworkInterfacesApi.datacenters_servers_nics_get",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NetworkInterfacesApi#datacenters_servers_nics_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Partially modify NICs
    # Update the properties of the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param nic [NicProperties] The properties of the NIC to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Nic]
    def datacenters_servers_nics_patch(datacenter_id, server_id, nic_id, nic, opts = {})
      data, _status_code, _headers = datacenters_servers_nics_patch_with_http_info(datacenter_id, server_id, nic_id, nic, opts)
      data
    end

    # Partially modify NICs
    # Update the properties of the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param nic [NicProperties] The properties of the NIC to be updated.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(Nic, Integer, Hash)>] Nic data, response status code and response headers
    def datacenters_servers_nics_patch_with_http_info(datacenter_id, server_id, nic_id, nic, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: NetworkInterfacesApi.datacenters_servers_nics_patch ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling NetworkInterfacesApi.datacenters_servers_nics_patch"
      end
      # verify the required parameter 'server_id' is set
      if @api_client.config.client_side_validation && server_id.nil?
        fail ArgumentError, "Missing the required parameter 'server_id' when calling NetworkInterfacesApi.datacenters_servers_nics_patch"
      end
      # verify the required parameter 'nic_id' is set
      if @api_client.config.client_side_validation && nic_id.nil?
        fail ArgumentError, "Missing the required parameter 'nic_id' when calling NetworkInterfacesApi.datacenters_servers_nics_patch"
      end
      # verify the required parameter 'nic' is set
      if @api_client.config.client_side_validation && nic.nil?
        fail ArgumentError, "Missing the required parameter 'nic' when calling NetworkInterfacesApi.datacenters_servers_nics_patch"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_patch, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_patch, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/servers/{serverId}/nics/{nicId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'serverId' + '}', CGI.escape(server_id.to_s)).sub('{' + 'nicId' + '}', CGI.escape(nic_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(nic)

      # return_type
      return_type = opts[:debug_return_type] || 'Nic'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"NetworkInterfacesApi.datacenters_servers_nics_patch",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NetworkInterfacesApi#datacenters_servers_nics_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create a NIC
    # Adds a NIC to the specified server. The combined total of NICs and attached volumes cannot exceed 24 per server.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic [Nic] The NIC to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Nic]
    def datacenters_servers_nics_post(datacenter_id, server_id, nic, opts = {})
      data, _status_code, _headers = datacenters_servers_nics_post_with_http_info(datacenter_id, server_id, nic, opts)
      data
    end

    # Create a NIC
    # Adds a NIC to the specified server. The combined total of NICs and attached volumes cannot exceed 24 per server.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic [Nic] The NIC to create.
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(Nic, Integer, Hash)>] Nic data, response status code and response headers
    def datacenters_servers_nics_post_with_http_info(datacenter_id, server_id, nic, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: NetworkInterfacesApi.datacenters_servers_nics_post ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling NetworkInterfacesApi.datacenters_servers_nics_post"
      end
      # verify the required parameter 'server_id' is set
      if @api_client.config.client_side_validation && server_id.nil?
        fail ArgumentError, "Missing the required parameter 'server_id' when calling NetworkInterfacesApi.datacenters_servers_nics_post"
      end
      # verify the required parameter 'nic' is set
      if @api_client.config.client_side_validation && nic.nil?
        fail ArgumentError, "Missing the required parameter 'nic' when calling NetworkInterfacesApi.datacenters_servers_nics_post"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_post, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_post, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/servers/{serverId}/nics'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'serverId' + '}', CGI.escape(server_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(nic)

      # return_type
      return_type = opts[:debug_return_type] || 'Nic'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"NetworkInterfacesApi.datacenters_servers_nics_post",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NetworkInterfacesApi#datacenters_servers_nics_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Modify NICs
    # Modify the properties of the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param nic [NicPut] The modified NIC
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines). (default to true)
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on (default to 0)
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Nic]
    def datacenters_servers_nics_put(datacenter_id, server_id, nic_id, nic, opts = {})
      data, _status_code, _headers = datacenters_servers_nics_put_with_http_info(datacenter_id, server_id, nic_id, nic, opts)
      data
    end

    # Modify NICs
    # Modify the properties of the specified NIC.
    # @param datacenter_id [String] The unique ID of the data center.
    # @param server_id [String] The unique ID of the server.
    # @param nic_id [String] The unique ID of the NIC.
    # @param nic [NicPut] The modified NIC
    # @param [Hash] opts the optional parameters
    # @option opts [Boolean] :pretty Controls whether the response is pretty-printed (with indentations and new lines).
    # @option opts [Integer] :depth Controls the detail depth of the response objects.  GET /datacenters/[ID]  - depth&#x3D;0: Only direct properties are included; children (servers and other elements) are not included.  - depth&#x3D;1: Direct properties and children references are included.  - depth&#x3D;2: Direct properties and children properties are included.  - depth&#x3D;3: Direct properties and children properties and children&#39;s children are included.  - depth&#x3D;... and so on
    # @option opts [Integer] :x_contract_number Users with multiple contracts must provide the contract number, for which all API requests are to be executed.
    # @return [Array<(Nic, Integer, Hash)>] Nic data, response status code and response headers
    def datacenters_servers_nics_put_with_http_info(datacenter_id, server_id, nic_id, nic, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: NetworkInterfacesApi.datacenters_servers_nics_put ...'
      end
      # verify the required parameter 'datacenter_id' is set
      if @api_client.config.client_side_validation && datacenter_id.nil?
        fail ArgumentError, "Missing the required parameter 'datacenter_id' when calling NetworkInterfacesApi.datacenters_servers_nics_put"
      end
      # verify the required parameter 'server_id' is set
      if @api_client.config.client_side_validation && server_id.nil?
        fail ArgumentError, "Missing the required parameter 'server_id' when calling NetworkInterfacesApi.datacenters_servers_nics_put"
      end
      # verify the required parameter 'nic_id' is set
      if @api_client.config.client_side_validation && nic_id.nil?
        fail ArgumentError, "Missing the required parameter 'nic_id' when calling NetworkInterfacesApi.datacenters_servers_nics_put"
      end
      # verify the required parameter 'nic' is set
      if @api_client.config.client_side_validation && nic.nil?
        fail ArgumentError, "Missing the required parameter 'nic' when calling NetworkInterfacesApi.datacenters_servers_nics_put"
      end
      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] > 10
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_put, must be smaller than or equal to 10.'
      end

      if @api_client.config.client_side_validation && !opts[:'depth'].nil? && opts[:'depth'] < 0
        fail ArgumentError, 'invalid value for "opts[:"depth"]" when calling NetworkInterfacesApi.datacenters_servers_nics_put, must be greater than or equal to 0.'
      end

      # resource path
      local_var_path = '/datacenters/{datacenterId}/servers/{serverId}/nics/{nicId}'.sub('{' + 'datacenterId' + '}', CGI.escape(datacenter_id.to_s)).sub('{' + 'serverId' + '}', CGI.escape(server_id.to_s)).sub('{' + 'nicId' + '}', CGI.escape(nic_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'pretty'] = opts[:'pretty'] if !opts[:'pretty'].nil?
      query_params[:'depth'] = opts[:'depth'] if !opts[:'depth'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      header_params[:'X-Contract-Number'] = opts[:'x_contract_number'] if !opts[:'x_contract_number'].nil?

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body] || @api_client.object_to_http_body(nic)

      # return_type
      return_type = opts[:debug_return_type] || 'Nic'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['Basic Authentication', 'Token Authentication']

      new_options = opts.merge(
        :operation => :"NetworkInterfacesApi.datacenters_servers_nics_put",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NetworkInterfacesApi#datacenters_servers_nics_put\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end