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

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

    position = 1
    documents_without_position.each do |document|
      document.update(position: position)
      position += 1
    end

    return if documents_with_position.blank?

    documents_with_position.each do |document|
      document.update(position: position)
      position += 1
    end
  end

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

    def documents
      application.application_documents
    end

    def documents_without_position
      @documents_without_position ||= documents.where(position: nil).to_a
    end

    def documents_with_position
      @documents_with_position ||= documents
        .where.not(id: documents_without_position)
        .ordered
        .to_a
    end
end
