module BinProxy
  class ProxyBaseItem
    include BinProxy::Logger
    attr_accessor :session, :disposition, :id
    attr_reader :src, :dest, :time
    def src=(s)
      @src = s
      @dest = opposite_peer(s)
    end
    def dest=(d)
      @dest = d
      @src = opposite_peer(d)
    end

    def initialize
      @time = Time.now
    end

    def headers
      {
        message_id: @id,
        session_id: @session && @session.id,
        src: @src,
        dest: @dest,
        time: @time.to_i,
        disposition: @disposition,
      }
    end

    def to_hash
      { head: headers }
    end
    private

    def opposite_peer(p)
      case p
      when :client; :server
      when :server; :client
      else raise "invalid peer: #{p}"
      end
    end

  end
  class ProxyEvent < ProxyBaseItem
    def initialize(summary)
      super()
      @summary = summary
      @disposition = 'Info'
    end

    def headers
      super.merge({
        summary: @summary
      })
    end
  end
end