# frozen_string_literal: true

# Dans le cadre de la story pour pouvoir rechercher un dossier en fonction des valeurs des champs branchées sur une API, voici une première pièce qui cible les champs RNA/RNF/SIRET (notamment les adresses pour de la recherche). Cette PR intègre :
#     la normalisation des adresses des champs RNA/RNF/SIRET
#     le fait de stocker ces données normalisées dans le champs.value_json (un jsonb)
#     le backfill les anciens champs RNA/RNF/SIRET
module Maintenance
  class PopulateRNFJSONValueTask < MaintenanceTasks::Task
    include Dry::Monads[:result]

    def collection
      Champs::RNFChamp.where("external_id != null and data != null") # had been found
      # Collection to be iterated over
      # Must be Active Record Relation or Array
    end

    def process(champ)
      result = champ.fetch_external_data
      case result
      in Success(data)
        begin
          champ.update_external_data!(data:)
        rescue ActiveRecord::RecordInvalid
          # some champ might have dossier nil
        end
      else # fondation was removed, but we kept API data in data:, use it to restore stuff

        champ.update_external_data!(data: champ.data.with_indifferent_access)
      end
    end

    def count
      # not really interested in counting because it raises PG Statement timeout
    end
  end
end
