require 'yao/plugins'
require 'faraday'
require 'faraday_middleware'
require 'yao/faraday_middlewares'

module Yao::Plugins
  class DefaultClientGenerator
    def call(f, token)
      f.request :accept, 'application/json'
      f.request :url_encoded
      f.request :user_agent

      if token
        f.request :os_token, token
      end

      f.request :read_only

      f.response :os_error_detector
      f.response :json, content_type: /\bjson$/

      if Yao.config.debug
        f.response :logger
        f.response :os_dumper
      end

      if Yao.config.debug_record_response
        f.response :os_response_recorder
      end

      f.adapter Faraday.default_adapter
    end

    Yao::Plugins.register(self, type: :client_generator)

    Yao.config.param :client_generator, :default do |v|
      raise("Invalid client_generator name %s.\nNote: name must be a Symbol" % v.inspect) unless Registry.instance[:client_generator][v]
    end
  end
end
