<?php

namespace App\Console\Commands;

use App\Enums\StatutAnnonce;
use App\Enums\TypeAnnonce;
use App\Models\Annonce;
use Illuminate\Console\Command;

class ExpirerEvenements extends Command
{
    protected $signature = 'annonces:expirer-evenements';

    protected $description = 'Passe en « Expirée » les annonces de type événement dont la date est passée.';

    public function handle(): int
    {
        $nombre = Annonce::query()
            ->where('type', TypeAnnonce::Evenement)
            ->where('statut', StatutAnnonce::Publiee)
            ->whereHas('evenementDetail', function ($query) {
                $query
                    ->where(function ($q) {
                        // événement avec date de fin : expiré si la fin est passée
                        $q->whereNotNull('date_fin')->where('date_fin', '<', now());
                    })
                    ->orWhere(function ($q) {
                        // événement sans date de fin : expiré si le début est passé
                        $q->whereNull('date_fin')->where('date_debut', '<', now());
                    });
            })
            ->update(['statut' => StatutAnnonce::Expiree]);

        $this->info("{$nombre} annonce(s) d'événement expirée(s).");

        return self::SUCCESS;
    }
}