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

namespace :support do
  desc <<~EOD
    Give procedure #PROCEDURE_ID a new owner.
    The owner can be specified with NEW_OWNER_ID or NEW_OWNER_MAIL.
  EOD
  task transfer_procedure_ownership: :environment do
    new_owner_id = ENV['NEW_OWNER_ID']
    new_owner_mail = ENV['NEW_OWNER_MAIL']

    new_owner = nil
    if new_owner_id.present?
      new_owner = Administrateur.find(new_owner_id)
    elsif new_owner_mail.present?
      new_owner = Administrateur.find_by(email: new_owner_mail)
    end

    if new_owner.blank?
      fail "Must specify a new owner"
    end

    procedure_id = ENV['PROCEDURE_ID']
    procedure = Procedure.find(procedure_id)

    rake_puts("Changing owner of procedure ##{procedure_id} from ##{procedure.administrateur_id} to ##{new_owner.id}")
    procedure.update(administrateur: new_owner)

    ProcedurePath.where(procedure_id: procedure_id).each do |pp|
      rake_puts("Changing owner of procedure_path #{pp.path} from ##{pp.administrateur_id} to ##{new_owner.id}")
      pp.update(administrateur: new_owner)
    end
  end

  desc <<~EOD
    Delete the user account for a given USER_MAIL.
    Only works if the user has no dossier where the instruction has started.
  EOD
  task delete_user_account: :environment do
    user_mail = ENV['USER_MAIL']
    if user_mail.nil?
      fail "Must specify a USER_MAIL"
    end
    user = User.find_by(email: user_mail)
    if user.dossiers.state_instruction_commencee.any?
      fail "Cannot delete this user because instruction has started for some dossiers"
    end
    user.dossiers.each { |d| d.delete_and_keep_track }
    user.destroy
  end
end
