class Admission::AdditionalField < ApplicationRecord
  belongs_to :application
  belongs_to :student_additional_field

  scope :by_display, -> { where(display: true) }
  scope :by_required, -> { where(required: true) }

  scope :eager_load_student_fields, -> do
    includes(:student_additional_field)
      .where('StudentStatistics.Admissions = 1')
      .references(:student_additional_field)
  end

  def self.build_all(application)
    student_fields = application.school.student_additional_fields
      .by_admission
      .ordered
      .pluck(:id)

    admission_fields = all.pluck(:student_additional_field_id)

    fields = student_fields - admission_fields
    delete_fields = admission_fields - student_fields

    application.additional_fields
      .where(student_additional_field_id: delete_fields)
      .find_each(&:destroy)

    fields.each do |field|
      application.additional_fields.build(student_additional_field_id: field)
    end

    application.additional_fields.sort_by do |field|
      student_fields.index(field.student_additional_field_id)
    end
  end
end
