class StudentAdditionalGroup < ApplicationRecord
  include Base::StudentAdditionalGroup

  belongs_to :school, primary_key: :SchoolID, foreign_key: :SchoolID,
    inverse_of: :student_additional_groups

  has_many :fields, class_name: '::StudentAdditionalField', inverse_of: :group,
    primary_key: :SSGID, foreign_key: :SSGID

  before_validation :set_order, on: :create

  validates :name, presence: true

  validates :name, presence: true, length: { maximum: 16 }
  validates :description, length: { maximum: 64 }

  scope :ordered, -> { order(:order) }

  scope :by_admissions, ->(flag) do
    joins(:fields).where(StudentStatistics: { Admissions: TRUE }) if flag
  end

  scope :with_admission_application_fields, ->(id, flag=true) do
    joins(:fields)
      .merge(StudentAdditionalField.joins_application_fields(id, flag))
  end

  scope :with_default_group, -> do
    group = StudentAdditionalGroup.new(order: -1, name: 'General', id: 0)
    [group] + all.to_a
  end

  def set_order
    next_item = school.student_additional_groups.order(order: :desc).limit(1).first
    self.order = next_item ? next_item.order + 1 : 0
  end
end
