class UserThemeSlot < ApplicationRecord
  BASE_THEMES = ['light', 'dark'].freeze
  SLOT_NOS = [1, 2, 3].freeze

  belongs_to :user

  validates :user_id, presence: true
  validates :base_theme, presence: true, inclusion: { in: BASE_THEMES }
  validates :slot_no, presence: true, inclusion: { in: SLOT_NOS }
  validates :tokens, presence: true
  validates :user_id, uniqueness: { scope: [:base_theme, :slot_no] }

  validate :tokens_must_be_object

  def serializable_hash(options = nil)
    hash = { only: [:base_theme, :slot_no, :tokens, :created_at, :updated_at] }
    super(hash.merge(options || {}))
  end

  private

  def tokens_must_be_object
    return if tokens.is_a?(Hash)

    errors.add(:tokens, 'は JSON object で指定してください．')
  end
end
