=begin
#NSX-T Manager API

#VMware NSX-T Manager REST API

OpenAPI spec version: 2.3.0.0.0

Generated by: https://github.com/swagger-api/swagger-codegen.git
Swagger Codegen version: 2.3.1

=end

require "uri"

module NSXT
  class NormalizationApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end

    # Get normalizations based on the query parameters
    # Returns the list of normalized resources based on the query parameters. Id and Type of the resource on which the normalizations is to be performed, are to be specified as query parameters in the URI. The target resource types to which normalization is to be done should also be specified as query parameter. 
    # @param preferred_normalization_type Resource type valid for use as target in normalization API.
    # @param resource_id Identifier of the resource on which normalization is to be performed
    # @param resource_type Resource type valid for use as source in normalization API.
    # @param [Hash] opts the optional parameters
    # @option opts [String] :cursor Opaque cursor to be used for getting next page of records (supplied by current result page)
    # @option opts [String] :included_fields Comma separated list of fields that should be included in query result
    # @option opts [Integer] :page_size Maximum number of results to return in this page (server may return fewer) (default to 1000)
    # @option opts [BOOLEAN] :sort_ascending 
    # @option opts [String] :sort_by Field by which records are sorted
    # @return [NormalizedResourceListResult]
    def get_normalizations(preferred_normalization_type, resource_id, resource_type, opts = {})
      data, _status_code, _headers = get_normalizations_with_http_info(preferred_normalization_type, resource_id, resource_type, opts)
      return data
    end

    # Get normalizations based on the query parameters
    # Returns the list of normalized resources based on the query parameters. Id and Type of the resource on which the normalizations is to be performed, are to be specified as query parameters in the URI. The target resource types to which normalization is to be done should also be specified as query parameter. 
    # @param preferred_normalization_type Resource type valid for use as target in normalization API.
    # @param resource_id Identifier of the resource on which normalization is to be performed
    # @param resource_type Resource type valid for use as source in normalization API.
    # @param [Hash] opts the optional parameters
    # @option opts [String] :cursor Opaque cursor to be used for getting next page of records (supplied by current result page)
    # @option opts [String] :included_fields Comma separated list of fields that should be included in query result
    # @option opts [Integer] :page_size Maximum number of results to return in this page (server may return fewer)
    # @option opts [BOOLEAN] :sort_ascending 
    # @option opts [String] :sort_by Field by which records are sorted
    # @return [Array<(NormalizedResourceListResult, Fixnum, Hash)>] NormalizedResourceListResult data, response status code and response headers
    def get_normalizations_with_http_info(preferred_normalization_type, resource_id, resource_type, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: NormalizationApi.get_normalizations ..."
      end
      # verify the required parameter 'preferred_normalization_type' is set
      if @api_client.config.client_side_validation && preferred_normalization_type.nil?
        fail ArgumentError, "Missing the required parameter 'preferred_normalization_type' when calling NormalizationApi.get_normalizations"
      end
      # verify enum value
      if @api_client.config.client_side_validation && !['NSGroup', 'IPSet', 'MACSet', 'LogicalSwitch', 'LogicalPort', 'DirectoryGroup'].include?(preferred_normalization_type)
        fail ArgumentError, "invalid value for 'preferred_normalization_type', must be one of NSGroup, IPSet, MACSet, LogicalSwitch, LogicalPort, DirectoryGroup"
      end
      # verify the required parameter 'resource_id' is set
      if @api_client.config.client_side_validation && resource_id.nil?
        fail ArgumentError, "Missing the required parameter 'resource_id' when calling NormalizationApi.get_normalizations"
      end
      # verify the required parameter 'resource_type' is set
      if @api_client.config.client_side_validation && resource_type.nil?
        fail ArgumentError, "Missing the required parameter 'resource_type' when calling NormalizationApi.get_normalizations"
      end
      # verify enum value
      if @api_client.config.client_side_validation && !['NSGroup'].include?(resource_type)
        fail ArgumentError, "invalid value for 'resource_type', must be one of NSGroup"
      end
      if @api_client.config.client_side_validation && !opts[:'page_size'].nil? && opts[:'page_size'] > 1000
        fail ArgumentError, 'invalid value for "opts[:"page_size"]" when calling NormalizationApi.get_normalizations, must be smaller than or equal to 1000.'
      end

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

      # resource path
      local_var_path = "/normalizations"

      # query parameters
      query_params = {}
      query_params[:'preferred_normalization_type'] = preferred_normalization_type
      query_params[:'resource_id'] = resource_id
      query_params[:'resource_type'] = resource_type
      query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
      query_params[:'included_fields'] = opts[:'included_fields'] if !opts[:'included_fields'].nil?
      query_params[:'page_size'] = opts[:'page_size'] if !opts[:'page_size'].nil?
      query_params[:'sort_ascending'] = opts[:'sort_ascending'] if !opts[:'sort_ascending'].nil?
      query_params[:'sort_by'] = opts[:'sort_by'] if !opts[:'sort_by'].nil?

      # header parameters
      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'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = ['BasicAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'NormalizedResourceListResult')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: NormalizationApi#get_normalizations\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end
