class Admissions::BatchFamilyApplyJob
  include Sidekiq::Worker

  def perform(school_id, family_ids, school_year_id)
    school = School.find_by(id: school_id)
    school_year = school.school_years.find_by(id: school_year_id)
    families = school.families
      .where(id: family_ids)
      .joins(admission_applicants: :application)
      .where(admission_applications: { school_year: school_year })
      .distinct

    families.each do |family|
      family_revisions = family.admission_family_revisions.find_by(school_year: school_year)
      family_revisions&.apply!

      medical_revision = family.admission_medical_revisions.find_by(school_year: school_year)
      medical_revision&.apply!

      contact_revisions = family.admission_contact_revisions
        .includes(contact_family: :contact).where(school_year: school_year)
      contact_revisions.each(&:apply!)

      family.admission_family_additional_values
        .by_school_year(school_year)
        .apply!
    end
  end
end
