class ReleaseNote < ApplicationRecord
  has_rich_text :body

  CATEGORIES = [
    'administrateur',
    'instructeur',
    'expert',
    'usager',
    'api'
  ]

  validates :categories, presence: true, inclusion: { in: CATEGORIES }
  validates :body, presence: true

  scope :published, -> { where(published: true, released_on: ..Date.current) }
  scope :for_categories, -> (categories) { where("categories && ARRAY[?]::varchar[]", categories) }

  def self.default_categories_for_role(role, instance = nil)
    case role
    when :administrateur
      ['administrateur', 'usager', instance.api_tokens.exists? ? 'api' : nil]
    when :instructeur
      ['instructeur', instance.user.expert? ? 'expert' : nil]
    when :expert
      ['expert', instance.user.instructeur? ? 'instructeur' : nil]
    else
      ['usager']
    end
  end

  def self.most_recent_announce_date_for_categories(categories)
    published.for_categories(categories).maximum(:released_on)
  end
end