# frozen_string_literal: true

# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
module GeocodeModel
  def self.supporter(id)
    supp = Supporter.find_by_id(id)
    with_reverse(supp) if supp.address && supp.state_code && supp.city
  end

  # Just a wrapper around a model's geocode method for delaying with:
  # GeocodeModel.delay.geocode(user)
  def self.geocode(model)
    begin
      model.geocode
    rescue Exception => e
      puts e
    end
    model.save
    model
  end

  def self.with_reverse(model)
    begin
      model.geocode
      model.reverse_geocode
    rescue Exception => e
      puts e
    end
    model.save
    model
  end

  # Geocode and get the timezone for a model
  def self.with_timezone(model)
    begin
      geocode(model)
    rescue Exception => e
      puts e
    end
    return model unless model.latitude && model.longitude

    model.timezone = NearestTimeZone.to(model.latitude, model.longitude)
    model.save
    model
  end
end