class ActiveMQHelper
  attr_reader :params

  def initialize
    @params = ConfigHelper.instance[:active_mq]
  end

  def queues
    result = []
    broker['value']['Queues'].map{|x| x['objectName']}.each do |q|
      result << queue_details(q)['value']
    end
    result
  end

  def queue_by_name(name)
    queues.find { |x| x['Name'] == name }
  end

  def remove_queue(queue)
    HTTParty.get("#{api_url}/exec/#{broker_object_name}/removeQueue/#{queue}",
                 basic_auth: @params[:credentials])
  end

  def clean_up
    queues.map{|x| x['Name']}.each do |queue|
      puts " - Removing #{queue} queue".blue
      remove_queue(queue)
    end
  end

  private

  def broker
    JSON.parse(HTTParty.get("#{api_url}/read/#{broker_object_name}",
                            basic_auth: @params[:credentials]))
  end

  def queue_details(queue_object_name)
    JSON.parse(HTTParty.get("#{api_url}/read/#{queue_object_name}",
                            basic_auth: @params[:credentials]))
  end

  def broker_object_name
    "org.apache.activemq:type=Broker,brokerName=#{@params[:broker]}"
  end

  def api_url
    "http://#{params[:host]}:#{params[:port]}/api/jolokia"
  end
end
