class StudentName < AdditionalName
  audited associated_with: :student

  enum code: { nickname: 0, other: 1, previous: 2 }

  attr_accessor :skip_sync

  belongs_to :student, foreign_key: :associated_id, inverse_of: :names

  after_commit :sync_legacy_names, unless: :skip_sync, on: [:create, :update]

  before_destroy :remove_legacy_names

  validates :code, uniqueness: { scope: :associated_id }
  validates :first_name, presence: true
  validates :first_name, :last_name, :middle_name, length: { maximum: 36 }
  validates :suffix, length: { maximum: 10 }

  private
    def sync_legacy_names
      return if first_name == student.nick_name || !nickname?

      student.update(nick_name: first_name)
    end

    def remove_legacy_names
      return unless nickname?

      student.update(nick_name: nil)
    end
end
