class Admission::Families::ProcessingService < ApplicationService
  def initialize(family, school_year_id)
    @family = family
    @school_year_id = school_year_id
  end

  def call
    Family.transaction do
      revision&.apply!(true)
      medical_revision&.apply!(true)
      additional_values.each(&:apply!)
      contact_revisions.each(&:apply!)
      @family.save
    end

    Family.transaction do
      revision&.delete
      medical_revision&.delete
      additional_values.delete_all
      contact_revisions.delete_all
    end
  end

  private
    def school_year
      @school_year ||= @family.school.school_years.find_by(id: @school_year_id)
    end

    def revision
      @revision ||= @family.admission_family_revisions.find_by(school_year: school_year)
    end

    def medical_revision
      @medical_revision ||= @family.admission_medical_revisions.find_by(school_year: school_year)
    end

    def contact_revisions
      @contact_revisions ||= @family.admission_contact_revisions.by_school_year(school_year)
    end

    def additional_values
      @additional_values ||= @family.admission_family_additional_values.by_school_year(school_year)
    end
end
