class Legislation::DraftVersion < ApplicationRecord
  VALID_STATUSES = %w[draft published].freeze

  acts_as_paranoid column: :hidden_at
  include ActsAsParanoidAliases

  translates :title,     touch: true
  translates :changelog, touch: true
  translates :body,      touch: true
  include Globalizable

  belongs_to :process, foreign_key: "legislation_process_id", inverse_of: :draft_versions
  has_many :annotations,
           foreign_key: "legislation_draft_version_id",
           inverse_of: :draft_version,
           dependent: :destroy

  validates_translation :title, presence: true
  validates_translation :body, presence: true
  validates :status, presence: true, inclusion: { in: ->(*) { VALID_STATUSES }}

  scope :published, -> { where(status: "published").order(id: :desc) }

  def body_html
    MarkdownConverter.new(body, with_toc_data: true).render
  end

  def toc_html
    MarkdownConverter.new(body).render_toc
  end

  def display_title
    status == "draft" ? "#{title} *" : title
  end

  def total_comments
    annotations.sum(:comments_count)
  end

  def best_comments
    Comment.where(commentable: annotations, ancestry: nil).sort_by_supports.limit(10)
  end
end
