$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
require 'rubygems'
require 'logger'
require 'noah'
require 'noah/agents/http_agent'
require 'noah/agents/dummy_agent'

module Noah
  class Agent
    include EM::Deferrable

    @@watchers = Noah::Watcher.watch_list
    @@agents = Noah::Watchers.agents

    def initialize
      @logger = LOGGER
      @logger.debug("Initializing with #{@@watchers.size} registered watches")
      @logger.debug("#{@@agents} agents registered")
      if EventMachine.reactor_running?
        self.succeed("Succeed callback")
      else
        logger.fatal("Must be inside a reactor!")
      end
    end

    def watchers
      @@watchers.size
    end

    def http_worker
      @http_worker
    end

    def reread_watchers
      @logger.debug("Found new watches")
      @logger.debug("Current watch count: #{@@watchers.size}")
      @@watchers = Noah::Watcher.watch_list
      @logger.debug("New watch count: #{@@watchers.size}")
    end

    def broker(msg)
      e,m = msg.split("|")
      be = Base64.encode64(e).gsub("\n","")
      EM::Iterator.new(@@agents).each do |agent, iter|
        agent.send(:notify, e, m, @@watchers.clone)
        iter.next
      end
    end
  end
end