class Maintenance::Admissions::Essays::PositionJob
  include Sidekiq::Worker

  def perform(application_id)
    @application_id = application_id
    return if essays_without_position.empty?

    position = 1
    essays_without_position.each do |essay|
      essay.update(position: position)
      position += 1
    end

    return if essays_with_position.blank?

    essays_with_position.each do |essay|
      essay.update(position: position)
      position += 1
    end
  end

  private
    def application
      @application ||= Admission::Application.find(@application_id)
    end

    def essays
      application.application_essays
    end

    def essays_without_position
      @essays_without_position ||= essays.where(position: nil).to_a
    end

    def essays_with_position
      @essays_with_position ||= essays
        .where.not(id: essays_without_position)
        .ordered
        .to_a
    end
end
