# Copyright (C) 2024 Manuel Bustillo

# frozen_string_literal: true

module Tables
  class Shift
    private attr_reader :initial_solution
    def initialize(initial_solution)
      @initial_solution = initial_solution
    end

    def each
      @initial_solution.tables.permutation(2) do |table_a, table_b|
        table_a.dup.each do |person|
          original_discomfort_a = table_a.reset
          original_discomfort_b = table_b.reset

          table_a.delete(person)
          table_b << person

          yield(@initial_solution)
        ensure
          table_b.delete(person)
          table_a << person

          table_a.discomfort = original_discomfort_a
          table_b.discomfort = original_discomfort_b
        end
      end
    end
  end
end