<?php

declare(strict_types=1);

namespace App\Module\Core\Domain\Exception;

use App\Module\Core\Domain\Entity\Role;
use DomainException;

/**
 * Levee lorsqu'une tentative de suppression vise un role marque comme systeme.
 *
 * Les roles systeme (ex : admin, user) sont proteges au niveau du domaine
 * pour garantir qu'ils ne peuvent jamais etre retires par un administrateur,
 * une commande ou un processus d'import. La traduction HTTP (403) est faite
 * ailleurs, cette exception reste purement domaine.
 */
final class SystemRoleDeletionException extends DomainException
{
    /**
     * Construit l'exception a partir du role refuse a la suppression.
     */
    public static function forRole(Role $role): self
    {
        return new self(sprintf('Le role systeme "%s" ne peut pas etre supprime.', $role->getCode()));
    }
}
