# frozen_string_literal: true

module TopicTrackingStatePublishable
  extend ActiveSupport::Concern

  class_methods do
    def publish_read_message(message_type:,
                             channel_name:,
                             topic_id:,
                             user:,
                             last_read_post_number:,
                             notification_level: nil)

      highest_post_number = DB.query_single(
        "SELECT #{user.staff? ? "highest_staff_post_number" : "highest_post_number"} FROM topics WHERE id = ?",
        topic_id
      ).first

      message = {
        message_type: message_type,
        topic_id: topic_id,
        payload: {
          last_read_post_number: last_read_post_number,
          notification_level: notification_level,
          highest_post_number: highest_post_number
        }
      }.as_json

      MessageBus.publish(channel_name, message, user_ids: [user.id])
    end
  end
end