module Carto
  module Bano
    # input : address
    # output : point RGeo::Cartesian::PointImpl
    class PointRetriever
      def initialize(address)
        @address = address
      end

      def point
        @point ||= convert_driver_result_to_point
      end

      private

      def driver
        @driver ||= Carto::Bano::Driver.new @address
      end

      def convert_driver_result_to_point
        result = JSON.parse(driver.call)
        if result['features'].size == 0
          Rails.logger.error "unable to find location for address #{@address}"
          return nil
        end
        RGeo::GeoJSON.decode(result['features'][0]['geometry'], json_parser: :json)
      end
    end
  end
end
