# frozen_string_literal: true

# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
require 'qx'
require 'delayed_job'

module DelayedJobHelper
  # Create a serialized delayed job handler for use in inserting new delayed jobs with raw sql
  # Be sure to wrap the handler in double quotes when inserting, not single
  def self.create_handler(obj, method_name, args)
    Delayed::PerformableMethod.new(obj, method_name, args).to_yaml.to_s
  end

  # Manually enqueue a job
  def self.enqueue_job(obj, method_name, args, options = {})
    handler = Delayed::PerformableMethod.new(obj, method_name, args).to_yaml.to_s
    Qx.insert_into(:delayed_jobs)
      .values(
        created_at: Time.current,
        updated_at: Time.current,
        priority: options[:priority] || 0,
        attempts: 0,
        handler: handler,
        run_at: options[:run_at] || Time.current,
        queue: options[:queue]
      ).returning('*').execute
  end
end