# frozen_string_literal: true

module Cybele
  module Helpers
    module Sidekiq
      def configure_sidekiq
        # Add gems
        append_file('Gemfile', template_content('sidekiq/sidekiq_Gemfile.erb'))

        create_sidekiq_files

        # Add sidekiq routes to routes
        prepend_file 'config/routes.rb',
                     template_content('sidekiq/sidekiq_routes_require.erb')
        inject_into_file 'config/routes.rb',
                         template_content('sidekiq/sidekiq_routes_mount.erb'),
                         after: 'Rails.application.routes.draw do'
        inject_into_file 'config/application.rb',
                         template_content('sidekiq/sidekiq_application.rb.erb'),
                         after: 'class Application < Rails::Application'
      end

      private

      def create_sidekiq_files
        # Initialize files
        files_to_template(
          'sidekiq/sidekiq.rb.erb' => 'config/initializers/sidekiq.rb',
          'sidekiq/sidekiq.rake.erb' => 'lib/tasks/sidekiq.rake',
          'sidekiq/sidekiq.yml.erb' => 'config/sidekiq.yml',
          'sidekiq/sidekiq_schedule.yml.erb' => 'config/sidekiq_schedule.yml',
          'sidekiq/sidekiq_Procfile.erb' => 'Procfile'
        )
      end
    end
  end
end