<?php

declare(strict_types=1);

namespace App\Module\Sites;

final class SitesModule
{
    public const string ID     = 'sites';
    public const string LABEL  = 'Sites';
    public const bool REQUIRED = false;

    /**
     * Liste declarative des permissions RBAC exposees par le module Sites.
     *
     * 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' => 'sites.view', 'label' => 'Voir les sites'],
            ['code' => 'sites.manage', 'label' => 'Gerer les sites (creer, editer, supprimer)'],
            ['code' => 'sites.bypass_scope', 'label' => 'Voir les donnees site-scoped de tous les sites (bypass du filtrage)'],
            // Lecture-referentiel transverse (ERP-102) : permet de LISTER les sites
            // pour alimenter les selects des modules Tiers (adresses client...), sans
            // donner l'acces d'administration `.view` (qui ouvre la page Sites dans la
            // sidebar). Accordee aux roles metier via la matrice RBAC § 2.7.
            ['code' => 'sites.read_ref', 'label' => 'Lire le referentiel sites (transverse, lecture seule)'],
        ];
    }
}
