# Posts new appeals to the Deletion appeal thread once per hour.
#
# @see DanbooruMaintenance#hourly
module PostAppealForumUpdater
  APPEAL_TOPIC_TITLE = "Deletion appeal thread"

  def self.update_forum!
    return if pending_appeals.empty?

    CurrentUser.scoped(User.system) do
      topic = ForumTopic.order(:id).create_with(creator: User.system).find_or_create_by!(title: APPEAL_TOPIC_TITLE)
      ForumPost.create!(creator: User.system, topic: topic, body: forum_post_body)
    end
  end

  def self.pending_appeals
    PostAppeal.pending.where(created_at: (1.hour.ago..Time.zone.now)).order(post_id: :asc)
  end

  def self.forum_post_body
    pending_appeals.map do |appeal|
      if appeal.reason.present?
        "post ##{appeal.post_id}: #{appeal.reason}"
      else
        "post ##{appeal.post_id}"
      end
    end.join("\n")
  end
end
