<?php

declare(strict_types=1);

namespace App\Module\Core\Domain\Exception;

use RuntimeException;

/**
 * Erreur de seed RBAC (service RbacSeeder / commande app:seed-rbac).
 *
 * Deux causes possibles, toutes deux fatales et explicites :
 *  - role metier attendu introuvable (ensureRoles() n'a pas tourne avant
 *    attachMatrix() ou ensureDemoUsers()) ;
 *  - code de permission de la matrice § 2.7 absent du catalogue : signe que
 *    `app:sync-permissions` n'a pas ete joue. Le message embarque alors
 *    l'invite a lancer la synchronisation, exploitee telle quelle par la
 *    commande.
 */
final class RbacSeedException extends RuntimeException
{
    public static function missingRole(string $roleCode): self
    {
        return new self(sprintf(
            'Role metier "%s" introuvable. Appelle RbacSeeder::ensureRoles() avant attachMatrix()/ensureDemoUsers().',
            $roleCode,
        ));
    }

    public static function missingPermission(string $permissionCode): self
    {
        return new self(sprintf(
            'Permission "%s" (matrice § 2.7) absente du catalogue. '
            .'Lance d\'abord `bin/console app:sync-permissions` pour la poser en base, puis relance le seed RBAC.',
            $permissionCode,
        ));
    }
}
