module IDRAC::Jobs

def wait_for_job(job_id)

Wait for a job to complete
def wait_for_job(job_id)
  # Job ID can be a job ID, path, or response hash from another request
  job_path = if job_id.is_a?(Hash)
               if job_id['headers'] && job_id['headers']['location']
                 job_id['headers']['location'].sub(/^\/redfish\/v1\//, '')
               else
                 raise Error, "Invalid job hash, missing location header"
               end
             elsif job_id.to_s.start_with?('/redfish/v1/')
               job_id.sub(/^\/redfish\/v1\//, '')
             else
               "Managers/iDRAC.Embedded.1/Jobs/#{job_id}"
             end
  
  puts "Waiting for job to complete: #{job_id}".light_cyan
  
  retries = 36  # ~6 minutes with 10s sleep
  while retries > 0
    response = authenticated_request(:get, "/redfish/v1/#{job_path}")
    
    if response.status == 200
      begin
        job_data = JSON.parse(response.body)
        job_state = job_data["JobState"]
        
        case job_state
        when "Completed"
          puts "Job completed successfully".green
          puts "CompletionTime: #{job_data['CompletionTime']}".green if job_data['CompletionTime']
          return job_data
        when "Failed"
          puts "Job failed: #{job_data['Message']}".red
          puts "CompletionTime: #{job_data['CompletionTime']}".red if job_data['CompletionTime'] 
          raise Error, "Job failed: #{job_data['Message']}"
        when "CompletedWithErrors"
          puts "Job completed with errors: #{job_data['Message']}".yellow
          puts "CompletionTime: #{job_data['CompletionTime']}".yellow if job_data['CompletionTime']
          return job_data
        end
        
        puts "Job state: #{job_state}. Waiting...".yellow
      rescue JSON::ParserError
        puts "Failed to parse job status response, will retry...".yellow
      end
    else
      puts "Failed to get job status. Status code: #{response.status}".red
    end
    
    retries -= 1
    sleep 10
  end
  
  raise Error, "Timeout waiting for job to complete"
end