# Copyright (C) 2024 Manuel Bustillo

class TableSimulatorJob < ApplicationJob
  queue_as :default

  def perform(wedding_id)
    ActsAsTenant.with_tenant(Wedding.find(wedding_id)) do
      engine = VNS::Engine.new

      engine.add_perturbation(Tables::Swap)
      engine.add_perturbation(Tables::Shift)

      initial_solution = Tables::Distribution.new(min_per_table: 8, max_per_table: 10)
      initial_solution.random_distribution(Guest.potential.shuffle)

      engine.initial_solution = initial_solution

      engine.target_function(&:discomfort)

      best_solution = engine.run

      best_solution.save!
    end
  end
end