module Resource
  class Client
    attr_reader :api_root_path, :client

    def self.instance
      @instance ||= new(Settings.resource)
    end

    def initialize(config)
      @client = Faraday.new(url: "#{config.site}#{config.api_root_path}", headers: config.headers) do |faraday|
        faraday.request :url_encoded
        faraday.response :json, parser_options: { object_class: OpenStruct }
        faraday.response :detailed_logger, Rails.logger
        faraday.adapter Faraday.default_adapter
        faraday.options.timeout = 600
      end
    end

    def request(verb, path, params = nil, headers = nil)
      response = if headers.present?
                   @client.send(verb, path, params, Array(headers))
                 else
                   @client.send(verb, path, params)
                 end
      response.body
    end
  end
end
