require 'ganymed/websocket'
require 'ganymed/websocket/filter'

module Ganymed
  class Websocket
    module Query
      def self.included(base)
        base.command :query
      end

      def query(data)
        return if not authenticated?
        data.each do |ns, query|
          query_id = query.delete('_id')

          log.debug("query #{query_id} from #{peer}: #{ns}(#{query.inspect})")
          t = Time.now

          events = db.collection(ns).find(query).map do |event|
            Event.parse(event.merge({'n' => ns}))
          end

          log.debug("query #{query_id} returned #{events.length} results in #{Time.now - t}s")

          send(:result, {query_id => convert(events)})
        end
      end
    end
  end
end