class FamilyAdditionalField < Base::FamilyAdditionalField
  enum type: { text: 1, multi_choice: 2, date: 3 }

  acts_as_list scope: :family_additional_group, column: :Sequence

  associations_for legacy: true do |a|
    a.belongs_to :school
    a.belongs_to :family_additional_group, keys: :FSGID, optional: true

    a.has_many :family_additional_values, keys: :FSID
    a.has_many :family_additional_choices, keys: :FSID
  end

  associations_for namespace: 'Admission' do |a|
    a.has_many :family_additional_fields, dependent: :destroy
    a.has_many :family_additional_values, dependent: :restrict_with_error
  end

  accepts_nested_attributes_for :family_additional_choices, update_only: true,
    allow_destroy: true

  scope :by_admission, ->(flag=true) { where(admissions: flag) unless flag.nil? }

  scope :join_application_fields, ->(flag=true) do
    query = joins(:admission_family_additional_fields)
      .where(admission_family_additional_fields: { display: true })
    return query if flag

    where.not(id: query)
  end

  scope :by_group, ->(id) { where(family_additional_group_id: id) if id }
  scope :ordered, -> { order(:sequence) }

  def self.order_by_group
    includes(:family_additional_group).order('FamilyStatisticGroups.sequence')
  end

  def self.order_by_sequence
    order(:sequence)
  end

  def self.order_by_choices
    includes(:family_additional_choices).order('FamilyStatisticChoices.sequence')
  end

  def families_with_values
    count = family_additional_values.distinct.pluck(:family_id).count
    count + admission_family_additional_values.distinct.pluck(:family_id).count
  end
end
