# frozen_string_literal: true

# For a most user / received reactions cards
module DiscourseRewind
  class Rewind::Action::Reactions < Rewind::Action::BaseReport
    def call
      data = {}

      if defined?(DiscourseReactions::Reaction)
        # This is missing heart reactions (default like)
        data[:post_used_reactions] = DiscourseReactions::Reaction
          .by_user(user)
          .where(created_at: date)
          .group(:reaction_value)
          .count

        data[:post_received_reactions] = DiscourseReactions::Reaction
          .includes(:post)
          .where(posts: { user_id: user.id })
          .where(created_at: date)
          .group(:reaction_value)
          .limit(5)
          .count
      end

      if SiteSetting.chat_enabled
        data[:chat_used_reactions] = Chat::MessageReaction
          .where(user: user)
          .where(created_at: date)
          .group(:emoji)
          .count

        data[:chat_received_reactions] = Chat::MessageReaction
          .includes(:chat_message)
          .where(chat_message: { user_id: user.id })
          .where(created_at: date)
          .group(:emoji)
          .count
      end

      { data:, identifier: "reactions" }
    end

    def enabled?
      SiteSetting.discourse_reaction_enabled || SiteSetting.chat_enabled
    end

    def sort_and_limit(reactions)
      reactions.sort_by { |_, v| -v }.first(6).to_h
    end
  end
end
