class EmployeeName < AdditionalName
  audited

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

  attr_accessor :skip_sync

  belongs_to :employee, foreign_key: :associated_id, inverse_of: :names

  after_save :sync_legacy_names, unless: :skip_sync

  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 unless nickname?

      employee.update(nickname: first_name)
    end

    def remove_legacy_names
      return unless nickname?

      employee.update(nickname: nil)
    end
end
