require "savon/logger"
require "savon/null_logger"
require "savon/hooks/group"
require "savon/soap"

module Savon
  Config = Struct.new(:_logger, :pretty_print_xml, :raise_errors, :soap_version, :env_namespace, :soap_header) do

    def self.default
      config = new
      config._logger = Logger.new
      config.raise_errors = true
      config.soap_version = SOAP::DEFAULT_VERSION
      config
    end

    alias_method :logger, :_logger

    def logger=(logger)
      _logger.subject = logger
    end

    def log_level=(level)
      _logger.level = level
    end

    def log=(log)
      if log == true
        self._logger = Logger.new
      else
        self._logger = NullLogger.new
      end
    end

    def hooks
      @hooks ||= Hooks::Group.new
    end

    def clone
      config = super
      config._logger = config._logger.clone
      config
    end

  end
end