# frozen_string_literal: true

module Jobs
  class PublishGroupMembershipUpdates < ::Jobs::Base
    def execute(args)
      available_types = [Group::AUTO_GROUPS_ADD, Group::AUTO_GROUPS_REMOVE]
      raise Discourse::InvalidParameters.new(:type) if !available_types.include?(args[:type])

      group = Group.find_by(id: args[:group_id])
      return if !group

      added_members = args[:type] == Group::AUTO_GROUPS_ADD

      User
        .human_users
        .where(id: args[:user_ids])
        .each do |user|
          if added_members
            group.trigger_user_added_event(user, group.automatic?)
          else
            group.trigger_user_removed_event(user)
          end
        end
    end
  end
end