# frozen_string_literal: true

require 'yaml'

set :sidekiq_config, -> { release_path.join('config', 'sidekiq.processed.yml') }

namespace :sidekiq_scheduler_roles do

task :prepare do
  on roles(:all) do |host|
    host_roles = host.roles_array.map(&:to_s)

    config_path = fetch(:sidekiq_path, release_path).join('config', 'sidekiq.yml')

    sidekiq_config = YAML.load(capture(:cat, config_path))
    next unless sidekiq_config

    schedule = sidekiq_config[:schedule]
    next unless schedule

    schedule.each_key do |key|
      roles = schedule[key].delete('roles')

      next if !roles.is_a?(Array) || roles.empty?

      schedule.delete(key) if (roles & host_roles).empty?
    end

    dump = YAML.dump(sidekiq_config).gsub("'", "\\'")

    execute(:echo, "'#{dump}'", :>, fetch(:sidekiq_config))
  end
end

end

before 'sidekiq:start', 'sidekiq_scheduler_roles:prepare' before 'sidekiq:restart', 'sidekiq_scheduler_roles:prepare'