# frozen_string_literal: true

class CustomEmoji < ActiveRecord::Base
  DEFAULT_GROUP = "default"
  MAX_GROUP_LENGTH = 20

  belongs_to :upload
  belongs_to :user

  has_many :upload_references, as: :target, dependent: :destroy

  validates :name, presence: true, uniqueness: true
  validates :group, length: { maximum: MAX_GROUP_LENGTH }
  validates :upload_id, presence: true
  validates :user_id, presence: true

  def self.normalize_group(group)
    normalized = group.to_s.strip.downcase.presence
    normalized == DEFAULT_GROUP ? nil : normalized
  end

  before_validation :set_default_user_id, on: :create

  after_save do
    if saved_change_to_upload_id?
      UploadReference.ensure_exist!(upload_ids: [upload_id], target: self)
    end
  end

  private

  def set_default_user_id
    self.user_id ||= Discourse.system_user.id
  end
end

# == Schema Information
#
# Table name: custom_emojis
#
#  id         :integer          not null, primary key
#  group      :string(20)
#  name       :string           not null
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  upload_id  :integer          not null
#  user_id    :integer          default(-1), not null
#
# Indexes
#
#  index_custom_emojis_on_name  (name) UNIQUE
#
