<?php

namespace App\Listeners;

// use Illuminate\Contracts\Queue\ShouldQueue;
// use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Auth\Events\DeleteUser;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class RevokeUserTokens
{
    /**
     * Create the event listener.
     */
    public function __construct(protected Request $request)
    {
        //
    }

    /**
     * Handle the event.
     */
    public function handle(PasswordReset|DeleteUser $event): void
    {
        $forceDeleteTokens = $event instanceof PasswordReset ? false : true;

        Log::channel('user')->info('RevokeUserTokens', [
            'event_user_id' => $event->user?->id,
            'request_user_id' => $this->request->user()?->id,
            'forceDeleteTokens' => $forceDeleteTokens,
        ]);

        // Si la requête est authentifiée via Sanctum, garder le token actuel
        if ($this->request->user() && $this->request->user()->currentAccessToken() && ! $forceDeleteTokens) {
            $currentTokenId = $this->request->user()->currentAccessToken()->id;

            $event->user->tokens()
                ->where('id', '!=', $currentTokenId)
                ->delete();
        } else {
            // Sinon (réinitialisation par email), révoquer tous les tokens
            $event->user->tokens()->delete();
        }
    }
}
