require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'json'

module OpenCongress
  OC_BASE = "http://www.opencongress.org/"
  API_URL = "#{OC_BASE}api/"
  
  attr_accessor :api_key
  
  class OpenCongressObject
    
    def self.construct_url(api_method, params)
      url = nil
      if OpenCongress.api_key == nil || OpenCongress.api_key == ''
        raise "Failed to provide OpenCongress API Key"
      else
        url = "#{API_URL}#{api_method}?key=#{OpenCongress.api_key}#{hash2get(params)}&format=json"
      end
      return url
    end
    
    def self.hash2get(h)
      get_string = ""
      
      h.each_pair do |key, value|
        get_string += "&#{key.to_s}=#{CGI::escape(value.to_s)}"
      end
      
      get_string
    end

    def self.parse_supporting_results(result)
      
      working = result["opencongress_users_tracking"]
      
      also_supporting_bills = []
      working["also_supporting_bills"]["bill"].each do |bill|
        also_supporting_bills << OCBill.new(bill)
      end
      
      also_opposing_bills = []
      working["also_opposing_bills"]["bill"].each do |bill|
        also_opposing_bills << OCBill.new(bill)
      end
      
      also_disapproved_senators = []
      working["also_disapproved_senators"]["person"].each do |person|
        also_disapproved_senators << OCPerson.new(person)
      end
      
      also_disapproved_representatives = []
      working["also_disapproved_representatives"]["person"].each do |person|
        also_disapproved_representatives << OCPerson.new(person)
      end

      also_approved_senators = []
      working["also_approved_senators"]["person"].each do |person|
        also_approved_senators << OCPerson.new(person)
      end
      
      also_approved_representatives = []
      working["also_approved_representatives"]["person"].each do |person|
        also_approved_representatives << OCPerson.new(person)
      end
      
      return {:also_supporting_bills => also_supporting_bills,
              :also_opposing_bills => also_opposing_bills,
              :also_disapproved_senators => also_disapproved_senators,
              :also_disapproved_representatives => also_disapproved_representatives,
              :also_approved_senators => also_approved_senators,
              :also_approved_representatives => also_approved_representatives}
      
    end
    
    def self.make_call(this_url)
      result = nil
      begin
        result = JSON.parse(open(this_url).read)
      rescue => e
        puts e
      end
      
      return result
      
    end
  end
  
end

Dir["#{File.dirname(__FILE__)}/opencongress/*.rb"].each {|source_file| require source_file}
