class GdsApi::Imminence

def self.extract_address_hash(place_hash)

def self.extract_address_hash(place_hash)
  address_fields = [
    place_hash["address1"],
    place_hash["address2"]
  ].reject { |a| a.nil? or a == "" }
  {"address" => address_fields.map(&:strip).join(", ")}
end

def self.extract_location_hash(location)

def self.extract_location_hash(location)
  # Deal with all known location formats:
  #   Old style: [latitude, longitude]; empty array for no location
  #   New style: hash with keys "longitude", "latitude"; nil for no location
  case location
  when Array
    {"latitude" => location[0], "longitude" => location[1]}
  when Hash
    location
  when nil
    {"latitude" => nil, "longitude" => nil}
  end
end

def self.parse_place_hash(place_hash)

def self.parse_place_hash(place_hash)
  location = self.extract_location_hash(place_hash["location"])
  address = self.extract_address_hash(place_hash)
  place_hash.merge(location).merge(address)
end

def api_url(type, params)

def api_url(type, params)
  vals = [:limit, :lat, :lng, :postcode].select{ |p| params.include? p }
  querystring = URI.encode_www_form vals.map { |p| [p, params[p]] }
  "#{@endpoint}/places/#{type}.json?#{querystring}"
end

def areas_for_postcode(postcode)

def areas_for_postcode(postcode)
  url = "#{@endpoint}/areas/#{URI.encode(postcode)}.json"
  get_json(url)
end

def areas_for_type(type)

def areas_for_type(type)
  url = "#{@endpoint}/areas/#{type}.json"
  get_json(url)
end

def business_support_schemes(facets_hash)

def business_support_schemes(facets_hash)
  query = facets_hash.keys.sort.map { |k| "#{k.to_s}=#{facets_hash[k]}" }.join("&")
  query = "?#{query}" unless query.empty?
  get_json!("#{@endpoint}/business_support_schemes.json#{query}")
end

def places(type, lat, lon, limit=5)

def places(type, lat, lon, limit=5)
  url = api_url(type, lat: lat, lng: lon, limit: limit)
  places = get_json(url) || []
  places.map { |p| self.class.parse_place_hash(p) }
end

def places_for_postcode(type, postcode, limit=5)

def places_for_postcode(type, postcode, limit=5)
  url = api_url(type, postcode: postcode, limit: limit)
  places = get_json(url) || []
  places.map { |p| self.class.parse_place_hash(p) }
end

def places_kml(type)

def places_kml(type)
  get_raw("#{@endpoint}/places/#{type}.kml").body
end