<?php

declare(strict_types=1);

namespace App\Module\Core;

final class CoreModule
{
    public const string ID     = 'core';
    public const string LABEL  = 'Core';
    public const bool REQUIRED = true;

    /**
     * Liste declarative des permissions RBAC exposees par le module Core.
     *
     * Consommee par la commande `app:sync-permissions` (SyncPermissionsCommand)
     * qui se charge d'upserter ces entrees dans la table `permission`, de
     * reactiver les codes precedemment marques orphelins et de marquer comme
     * orphelins ceux qui ont disparu du code source.
     *
     * La cle `module` est auto-injectee par le sync command a partir de
     * `self::ID`, il est donc inutile de la repeter dans chaque entree.
     *
     * Convention de nommage des codes : `module.resource[.sub].action` en
     * snake_case, le prefixe module devant correspondre exactement a
     * `self::ID` (verifie par la commande de synchronisation).
     *
     * @return array<int, array{code: string, label: string}>
     */
    public static function permissions(): array
    {
        return [
            ['code' => 'core.users.view', 'label' => 'Voir les utilisateurs'],
            ['code' => 'core.users.manage', 'label' => 'Gerer les utilisateurs (creer, editer, supprimer)'],
            ['code' => 'core.roles.view', 'label' => 'Voir les roles RBAC'],
            ['code' => 'core.roles.manage', 'label' => 'Gerer les roles et permissions'],
            ['code' => 'core.permissions.view', 'label' => 'Consulter le catalogue des permissions RBAC'],
            ['code' => 'core.audit_log.view', 'label' => 'Consulter le journal d\'audit'],
        ];
    }
}
