# frozen_string_literal: true

require "sidekiq"
require "sidekiq/fetch"

require_relative "./throttled_retriever"

module Sidekiq
  module Throttled
    module Patches
      module BasicFetch
        def self.prepended(base)
          base.prepend(ThrottledRetriever)
        end

        private

        # Returns list of queues to try to fetch jobs from.
        #
        # @note It may return an empty array.
        # @param [Array<String>] queues
        # @return [Array<String>]
        def queues_cmd
          throttled_queues = Throttled.cooldown&.queues
          return super if throttled_queues.nil? || throttled_queues.empty?

          super - throttled_queues
        end
      end
    end
  end
end

Sidekiq::BasicFetch.prepend(Sidekiq::Throttled::Patches::BasicFetch)