<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use App\Models\Job;

class JobList extends Command
{
	/**
	 * The name and signature of the console command.
	 *
	 * @var string
	 */
	protected $signature = 'job:list';

	/**
	 * The console command description.
	 *
	 * @var string
	 */
	protected $description = 'Detail list of items in the queue';

	/**
	 * Execute the console command.
	 */
	public function handle()
	{
		$lastq = NULL;

		foreach (Job::orderBy('queue')->orderBy('created_at')->cursor() as $o) {
			if ($o->queue !== $lastq) {
				$this->alert(sprintf('Queue: %s',$o->queue));
				$lastq = $o->queue;
			}

			$this->info(sprintf('%s-%d: %s[%s] - %d/%d tries [Next:%s]%s',
				$o->uuid,
				$o->id,
				$o->display_name,
				$o->command->jobname,
				$o->attempts,$o->maxTries,
				$o->available_at ?: '-',
				$o->attempts ? sprintf(' (Created:%s)',$o->created_at) : ''
			));
		}
	}
}