module Pwwka
  module ErrorHandlers
    class BaseErrorHandler
      include Pwwka::Logging
      def handle_error(receiver,queue_name,payload,delivery_info,exception)
        raise "subclass must implement"
      end

    private

      def log(message,queue_name,payload,delivery_info,exception)
        logf "%{message} on %{queue_name} -> %{payload}, %{routing_key}: %{exception}: %{backtrace}", {
          message: message,
          queue_name: queue_name,
          payload: payload,
          routing_key: delivery_info.routing_key,
          exception: exception,
          backtrace: exception.backtrace.join(";"),
        }
      end

      # Subclasses can call these methods instead of
      # using true/false to more clearly indicate their intent
      def keep_going
        true
      end

      def abort_chain
        false
      end
    end
  end
end