require 'net/http'

DESTINATION_REACHED = 15      #OSRM instruction code


def request_route a,b
  @query = "http://localhost:5000/viaroute?loc=#{a}&loc=#{b}&output=json&geomformat=cmp"
  #log @query
  uri = URI.parse @query
  Net::HTTP.get_response uri
rescue Errno::ECONNREFUSED => e
  raise "*** osrm-routed is not running."
rescue Timeout::Error
  raise "*** osrm-routed did not respond."
end

def parse_response response
  if response.code == "200" && response.body.empty? == false
    json = JSON.parse response.body
    if json['status'] == 0
      route = way_list json['route_instructions']
      if route.empty?
        "Empty route: #{json['route_instructions']}"
      else
        "Route: #{route}"
      end
    elsif json['status'] == 207
      "No route"
    else
      "Status: #{json['status']}"
    end
  else
    "HTTP: #{response.code}"
  end
end

def got_route? response
  if response.code == "200" && !response.body.empty?
    json = JSON.parse response.body
    if json['status'] == 0
      return way_list( json['route_instructions']).empty? == false
    end
  end
  false
end

def route_status response
  if response.code == "200" && !response.body.empty?
    json = JSON.parse response.body
    if json['status'] == 0
      if way_list( json['route_instructions']).empty?
        return 'Empty route'
      else
        return 'x'
      end
    elsif json['status'] == 207
      ''
    else
      "Status #{json['status']}"
    end
  else
    "HTTP #{response.code}"
  end
end

def way_list instructions
  instructions.reject { |r| r[0].to_s=="#{DESTINATION_REACHED}" }.
  map { |r| r[1] }.
  map { |r| r=="" ? '""' : r }.
  join(',')
end

def compass_list instructions
  instructions.reject { |r| r[0].to_s=="#{DESTINATION_REACHED}" }.
  map { |r| r[6] }.
  map { |r| r=="" ? '""' : r }.
  join(',')
end

def bearing_list instructions
  instructions.reject { |r| r[0].to_s=="#{DESTINATION_REACHED}" }.
  map { |r| r[7] }.
  map { |r| r=="" ? '""' : r }.
  join(',')
end