<?php

use App\Models\Ticket;
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schedule;

Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

// Comando para liberar boletos con reserva expirada (más de 5 minutos)
Artisan::command('tickets:release-expired', function () {
    $this->info('Iniciando proceso de liberación de apartados expirados...');

    // Buscar tickets reservados cuyo tiempo límite 'expires_at' sea menor o igual a ahora
    $releasedCount = Ticket::where('status', 'reserved')
        ->where('expires_at', '<=', now())
        ->update([
            'status' => 'available',
            'user_id' => null,
            'reseller_id' => null,
            'transaction_id' => null,
            'reserved_at' => null,
            'expires_at' => null,
        ]);

    $this->info("Liberación completada con éxito. Se liberaron {$releasedCount} boletos.");
})->purpose('Liberar apartados temporales de boletos que han excedido el límite de 5 minutos');

// Programar la ejecución automática del comando cada 5 minutos
Schedule::command('tickets:release-expired')->everyFiveMinutes();
