class Admission::Family < ApplicationRecord
  enum payment_status: { in_person: 0, online: 1, exempt: 2 }

  belongs_to :family
  belongs_to :school_year

  has_many :attached_tags, class_name: '::AttachedTag', as: :associated, inverse_of: :associated
  has_many :tags, through: :attached_tags, dependent: :destroy
  has_many :parent_teacher_meetings, foreign_key: :family_id, dependent: :destroy,
    inverse_of: :family

  delegate :school, to: :school_year

  before_save :mark_payment_options, if: :payment_status_changed?

  scope :by_payment_status, ->(status) { where(payment_status: status) }
  scope :with_tags, ->(ids) { joins(:tags).where(tags: { id: ids }) if ids.present? }

  private
    def mark_payment_options
      return if exempt?

      if payment_status.nil?
        self.paid_at = nil
        self.payment_amount = nil
        self.payment_description = nil
      else
        admission_config = school.find_or_build_admission_config
        self.paid_at = Date.current
        self.payment_amount = admission_config.payment_amount
        self.payment_description = admission_config.payment_description
      end
    end
end
