<?php

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Schedule;

/*
| Batimento do agendador.
|
| Marca a cada minuto que o cron está vivo. É o que permite ao
| `php artisan xml:diagnostico` afirmar se o cron foi mesmo criado —
| sem isso, um cron esquecido só apareceria dias depois, na forma de
| XML que nunca chegou.
*/
Schedule::call(fn () => Cache::put('agendador.ultima_execucao', now(), now()->addDay()))
    ->everyMinute()
    ->name('batimento-agendador');

/*
| Monitor de XML.
|
| A cada 15 minutos o comando varre as empresas e dispara apenas as que já
| cumpriram o próprio intervalo mínimo (monitor_intervalo_min), respeitando o
| limite de consultas do NFeDistribuicaoDFe.
|
| Em cPanel compartilhado basta uma única entrada no Cron Jobs:
|   * * * * * /usr/local/bin/php /home/USUARIO/app/artisan schedule:run >/dev/null 2>&1
*/
Schedule::command('xml:monitor')
    ->everyFifteenMinutes()
    ->withoutOverlapping(30)
    ->runInBackground();

// Processa a fila em lotes curtos — substitui o supervisor, indisponível
// em hospedagem compartilhada.
Schedule::command('queue:work --stop-when-empty --max-time=280 --tries=1')
    ->everyFiveMinutes()
    ->withoutOverlapping(10);

Schedule::command('queue:prune-failed --hours=720')->weekly();
