class Admission::RegistrationField < ApplicationRecord
  include Fieldable

  audited

  enum field: {
    relationship: 9,
    first_name: 10,
    last_name: 11,
    email: 12,
    title_id: 0,
    country_id: 18,
    address: 1,
    address_ext: 2,
    city: 3,
    state: 4,
    zip_code: 5,
    home_phone: 6,
    cell_phone: 7,
    work_phone: 8,
    include_family_directory: 13,
    exclude_home_phone: 14,
    exclude_cell_phone: 15,
    exclude_mailing_address: 16,
    exclude_email_address: 17
  }

  REQUIRED_FIELDS = fields.keys[0..3]
  DISPLAY_FIELDS = fields.keys[4..13]

  FAMILY_DIRECTORY_FIELDS = {
    'include_family_directory' => 'directory',
    'exclude_home_phone' => 'directory_phone',
    'exclude_cell_phone' => 'directory_cell',
    'exclude_mailing_address' => 'directory_address',
    'exclude_email_address' => 'directory_email'
  }

  FORM_FIELDS = REQUIRED_FIELDS + DISPLAY_FIELDS

  belongs_to :school

  after_initialize :set_defaults_for_required_fields

  scope :by_display_fields, -> { where(field: DISPLAY_FIELDS, display: true) }
  scope :by_family_directory, -> { where(field: FAMILY_DIRECTORY_FIELDS.keys) }
  scope :by_form_fields, -> { where(field: FORM_FIELDS) }

  def self.sorted
    order(:field)
  end

  private
    def set_defaults_for_required_fields
      return unless REQUIRED_FIELDS.include?(field)

      self.display = true
      self.required = true
    end
end
