lib/tasks/etablissement.rake
# frozen_string_literal: true

require Rails.root.join("lib", "tasks", "task_helper")

namespace :etablissement do
  desc 'Immediately consolidate etablissements in degraded mode for a given procedure id'
  task update_from_degraded_mode: :environment do
    procedure_id = ENV.fetch("PROCEDURE_ID")

    # Logic from BackfillSiretDegradedModeJob
    # but without the wait of all dossiers queue.

    rake_puts "Consolidate dossiers"
    etablissements = Etablissement.joins(dossier: :revision).where(adresse: nil, dossier: { procedure_revisions: { procedure_id: } })
    progress = ProgressReport.new(etablissements.count)

    etablissements.find_each do |etablissement|
      begin
        APIEntrepriseService.update_etablissement_from_degraded_mode(etablissement, procedure_id)
      rescue => e
        Sentry.capture_exception(e)
        rake_puts "Etablissement ##{etablissement.id}: #{e.message}"
      end

      progress.inc
    end
    progress.finish

    rake_puts "Consolidate champs SIRET"
    etablissements = Etablissement.joins(champ: { dossier: :revision }).where(adresse: nil, champ: { procedure_revisions: { procedure_id: } })
    progress = ProgressReport.new(etablissements.count)

    etablissements.find_each do |etablissement|
      begin
        APIEntrepriseService.update_etablissement_from_degraded_mode(etablissement, procedure_id)
      rescue => e
        Sentry.capture_exception(e)
        rake_puts "Etablissement ##{etablissement.id}: #{e.message}"
      end

      progress.inc
    end

    progress.finish
  end
end
