<?php

declare(strict_types=1);

namespace App\Module\Core\Infrastructure\EventListener;

use App\Module\Core\Application\Rbac\DefaultUserRoleAssigner;
use App\Module\Core\Domain\Entity\User;
use Doctrine\ORM\Event\PrePersistEventArgs;

/**
 * Assigne le rôle RBAC de base « user » à tout nouvel utilisateur qui n'en a pas,
 * quel que soit le chemin de persistance (API Platform, fixtures, MCP).
 *
 * Sans ça, un user créé n'est rattaché à aucun rôle RBAC et ses permissions
 * effectives restent vides, peu importe les permissions portées par le rôle.
 */
final readonly class UserDefaultRoleListener
{
    public function __construct(private DefaultUserRoleAssigner $assigner) {}

    public function prePersist(User $user, PrePersistEventArgs $args): void
    {
        $this->assigner->ensureDefaultRole($user);
    }
}
