Rails.application.configure do
  config.good_job.enable_cron = true

  if ENV["UPGRADES_ENABLED"] == "true"
    config.good_job.cron = {
      auto_upgrade: {
        cron: "every 2 minutes",
        class: "AutoUpgradeJob",
        description: "Check for new versions of the app and upgrade if necessary"
      }
    }
  end

  config.good_job.on_thread_error = ->(exception) { Rails.error.report(exception) }

  # 5 queue threads + 3 for job listener, cron, executor = 8 threads allocated
  config.queues = {
    "latency_low" => { max_threads: 1, priority: 10 }, # ~30s jobs
    "latency_low,latency_medium" => { max_threads: 2, priority: 5 }, # ~1-2 min jobs
    "latency_low,latency_medium,latency_high" => { max_threads: 1, priority: 1 }, # ~5+ min jobs
    "*" => { max_threads: 1, priority: 0 } # fallback queue
  }

  # Auth for jobs admin dashboard
  ActiveSupport.on_load(:good_job_application_controller) do
    before_action do
      raise ActionController::RoutingError.new("Not Found") unless current_user&.super_admin? || Rails.env.development?
    end

    def current_user
      session = Session.find_by(id: cookies.signed[:session_token])
      session&.user
    end
  end
end
