class ModuleApiCartoService
  def self.save_qp!(dossier, json_latlngs)
    if dossier.procedure.module_api_carto.quartiers_prioritaires?
      qp_list = generate_qp(JSON.parse(json_latlngs))

      qp_list.each do |qp|
        qp[:dossier_id] = dossier.id
        qp[:geometry] = qp[:geometry].to_json
        QuartierPrioritaire.create(qp)
      end
    end
  end

  def self.save_cadastre!(dossier, json_latlngs)
    if dossier.procedure.module_api_carto.cadastre?
      cadastre_list = generate_cadastre JSON.parse(json_latlngs)

      cadastre_list.each do |cadastre|
        cadastre[:dossier_id] = dossier.id
        cadastre[:geometry] = cadastre[:geometry].to_json
        Cadastre.create(cadastre)
      end
    end
  end

  def self.generate_qp(coordinates)
    coordinates.flat_map do |coordinate|
      ApiCarto::QuartiersPrioritairesAdapter.new(
        coordinate.map { |element| [element['lng'], element['lat']] }
      ).results
    end
  end

  def self.generate_cadastre(coordinates)
    coordinates.flat_map do |coordinate|
      ApiCarto::CadastreAdapter.new(
        coordinate.map { |element| [element['lng'], element['lat']] }
      ).results
    end
  end

  def self.generate_rpg(coordinates)
    coordinates.flat_map do |coordinate|
      ApiGeo::RPGAdapter.new(
        coordinate.map { |element| [element['lng'], element['lat']] }
      ).results
    end
  end
end
