=begin
#Scubawhere API Documentation

#This is the documentation for scubawhere's RMS API. This API is only to be used by authorized parties with valid auth tokens.  [Learn about scubawhere](http://www.scubawhere.com) to become an authorized consumer of our API 

OpenAPI spec version: 1.0.0
Contact: bryan@scubawhere.com
Generated by: https://github.com/swagger-api/swagger-codegen.git

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.

=end

require "uri"

module SwaggerClient
  class CourseApi
    attr_accessor :api_client

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

    # Create a new course
    # 
    # @param name 
    # @param description 
    # @param capacity 
    # @param prices 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :certificate_id 
    # @option opts [Array<Integer>] :tickets 
    # @option opts [Array<Integer>] :trainings 
    # @return [InlineResponse20027]
    def create_course(name, description, capacity, prices, opts = {})
      data, _status_code, _headers = create_course_with_http_info(name, description, capacity, prices, opts)
      return data
    end

    # Create a new course
    # 
    # @param name 
    # @param description 
    # @param capacity 
    # @param prices 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :certificate_id 
    # @option opts [Array<Integer>] :tickets 
    # @option opts [Array<Integer>] :trainings 
    # @return [Array<(InlineResponse20027, Fixnum, Hash)>] InlineResponse20027 data, response status code and response headers
    def create_course_with_http_info(name, description, capacity, prices, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: CourseApi.create_course ..."
      end
      # verify the required parameter 'name' is set
      fail ArgumentError, "Missing the required parameter 'name' when calling CourseApi.create_course" if name.nil?
      # verify the required parameter 'description' is set
      fail ArgumentError, "Missing the required parameter 'description' when calling CourseApi.create_course" if description.nil?
      # verify the required parameter 'capacity' is set
      fail ArgumentError, "Missing the required parameter 'capacity' when calling CourseApi.create_course" if capacity.nil?
      # verify the required parameter 'prices' is set
      fail ArgumentError, "Missing the required parameter 'prices' when calling CourseApi.create_course" if prices.nil?
      # resource path
      local_var_path = "/course/add".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'name'] = name
      query_params[:'description'] = description
      query_params[:'capacity'] = capacity
      query_params[:'prices'] = @api_client.build_collection_param(prices, :multi)
      query_params[:'certificate_id'] = opts[:'certificate_id'] if !opts[:'certificate_id'].nil?
      query_params[:'tickets'] = @api_client.build_collection_param(opts[:'tickets'], :multi) if !opts[:'tickets'].nil?
      query_params[:'trainings'] = @api_client.build_collection_param(opts[:'trainings'], :multi) if !opts[:'trainings'].nil?

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

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

    # Delete a course by ID
    # 
    # @param id 
    # @param [Hash] opts the optional parameters
    # @return [InlineResponse2003]
    def delete_course(id, opts = {})
      data, _status_code, _headers = delete_course_with_http_info(id, opts)
      return data
    end

    # Delete a course by ID
    # 
    # @param id 
    # @param [Hash] opts the optional parameters
    # @return [Array<(InlineResponse2003, Fixnum, Hash)>] InlineResponse2003 data, response status code and response headers
    def delete_course_with_http_info(id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: CourseApi.delete_course ..."
      end
      # verify the required parameter 'id' is set
      fail ArgumentError, "Missing the required parameter 'id' when calling CourseApi.delete_course" if id.nil?
      # resource path
      local_var_path = "/course/delete".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'id'] = id

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

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

    # Update a course by ID
    # 
    # @param id 
    # @param name 
    # @param description 
    # @param capacity 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :certificate_id 
    # @option opts [Array<Integer>] :tickets 
    # @option opts [Array<Integer>] :trainings 
    # @return [InlineResponse20028]
    def edit_course(id, name, description, capacity, opts = {})
      data, _status_code, _headers = edit_course_with_http_info(id, name, description, capacity, opts)
      return data
    end

    # Update a course by ID
    # 
    # @param id 
    # @param name 
    # @param description 
    # @param capacity 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :certificate_id 
    # @option opts [Array<Integer>] :tickets 
    # @option opts [Array<Integer>] :trainings 
    # @return [Array<(InlineResponse20028, Fixnum, Hash)>] InlineResponse20028 data, response status code and response headers
    def edit_course_with_http_info(id, name, description, capacity, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: CourseApi.edit_course ..."
      end
      # verify the required parameter 'id' is set
      fail ArgumentError, "Missing the required parameter 'id' when calling CourseApi.edit_course" if id.nil?
      # verify the required parameter 'name' is set
      fail ArgumentError, "Missing the required parameter 'name' when calling CourseApi.edit_course" if name.nil?
      # verify the required parameter 'description' is set
      fail ArgumentError, "Missing the required parameter 'description' when calling CourseApi.edit_course" if description.nil?
      # verify the required parameter 'capacity' is set
      fail ArgumentError, "Missing the required parameter 'capacity' when calling CourseApi.edit_course" if capacity.nil?
      # resource path
      local_var_path = "/course/edit".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'id'] = id
      query_params[:'name'] = name
      query_params[:'description'] = description
      query_params[:'capacity'] = capacity
      query_params[:'certificate_id'] = opts[:'certificate_id'] if !opts[:'certificate_id'].nil?
      query_params[:'tickets'] = @api_client.build_collection_param(opts[:'tickets'], :multi) if !opts[:'tickets'].nil?
      query_params[:'trainings'] = @api_client.build_collection_param(opts[:'trainings'], :multi) if !opts[:'trainings'].nil?

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

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

    # Retrieve all courses including any deleted models
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<Course>]
    def get_all_courses(opts = {})
      data, _status_code, _headers = get_all_courses_with_http_info(opts)
      return data
    end

    # Retrieve all courses including any deleted models
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(Array<Course>, Fixnum, Hash)>] Array<Course> data, response status code and response headers
    def get_all_courses_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: CourseApi.get_all_courses ..."
      end
      # resource path
      local_var_path = "/course/all".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      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 => 'Array<Course>')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: CourseApi#get_all_courses\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve all courses including any deleted models
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<Course>]
    def get_all_with_trashed_courses(opts = {})
      data, _status_code, _headers = get_all_with_trashed_courses_with_http_info(opts)
      return data
    end

    # Retrieve all courses including any deleted models
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(Array<Course>, Fixnum, Hash)>] Array<Course> data, response status code and response headers
    def get_all_with_trashed_courses_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: CourseApi.get_all_with_trashed_courses ..."
      end
      # resource path
      local_var_path = "/course/all-with-trashed".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      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 => 'Array<Course>')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: CourseApi#get_all_with_trashed_courses\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve a course by ID
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :id 
    # @return [InlineResponse20027]
    def get_course(opts = {})
      data, _status_code, _headers = get_course_with_http_info(opts)
      return data
    end

    # Retrieve a course by ID
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :id 
    # @return [Array<(InlineResponse20027, Fixnum, Hash)>] InlineResponse20027 data, response status code and response headers
    def get_course_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: CourseApi.get_course ..."
      end
      # resource path
      local_var_path = "/course".sub('{format}','json')

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

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      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 => 'InlineResponse20027')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: CourseApi#get_course\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end
