class Pumi::DataSource::Geocoder::AbstractGeocoder::Google

def build_result(data)

def build_result(data)
  province_name_en = find_address_component(
    data,
    "administrative_area_level_1"
  )&.fetch("long_name")
  province = Pumi::Province.where(full_name_en: province_name_en).first
  Result.new(
    name: data.dig("address_components", 0, "long_name"),
    lat: data.dig("geometry", "location", "lat"),
    long: data.dig("geometry", "location", "lng"),
    bounding_box: [
      data.dig("geometry", "bounds", "northeast", "lat"),
      data.dig("geometry", "bounds", "northeast", "lng"),
      data.dig("geometry", "bounds", "southwest", "lat"),
      data.dig("geometry", "bounds", "southwest", "lng")
    ],
    country_code: find_address_component(data, "country").fetch("short_name").upcase,
    district_name_en: find_address_component(
      data,
      "administrative_area_level_2"
    )&.fetch("long_name"),
    types: data["types"],
    iso3166_2: province&.iso3166_2
  )
end

def find_address_component(data, type)

def find_address_component(data, type)
  data.fetch("address_components").find do |c|
    c.fetch("types").include?(type)
  end
end