<?php

declare(strict_types=1);

namespace App\Module\Commercial;

final class CommercialModule
{
    public const string ID     = 'commercial';
    public const string LABEL  = 'Commercial';
    public const bool REQUIRED = false;

    /**
     * Liste declarative des permissions RBAC exposees par le module Commercial.
     *
     * 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).
     *
     * Granularite alignee sur Core/Catalog (view + manage), plus deux
     * permissions dediees a l'onglet Comptabilite et a l'archivage
     * (cf. spec-back M1 § 2.7).
     *
     * @return array<int, array{code: string, label: string}>
     */
    public static function permissions(): array
    {
        return [
            ['code' => 'commercial.clients.view', 'label' => 'Voir les clients'],
            ['code' => 'commercial.clients.manage', 'label' => 'Créer / modifier les clients (hors onglet Comptabilité)'],
            ['code' => 'commercial.clients.accounting.view', 'label' => 'Voir l\'onglet Comptabilité d\'un client'],
            ['code' => 'commercial.clients.accounting.manage', 'label' => 'Modifier l\'onglet Comptabilité d\'un client'],
            ['code' => 'commercial.clients.archive', 'label' => 'Archiver / restaurer un client'],
            ['code' => 'commercial.suppliers.view', 'label' => 'Voir les fournisseurs'],
            ['code' => 'commercial.suppliers.manage', 'label' => 'Créer / modifier les fournisseurs (hors onglet Comptabilité)'],
            ['code' => 'commercial.suppliers.accounting.view', 'label' => 'Voir l\'onglet Comptabilité d\'un fournisseur'],
            ['code' => 'commercial.suppliers.accounting.manage', 'label' => 'Modifier l\'onglet Comptabilité d\'un fournisseur'],
            ['code' => 'commercial.suppliers.archive', 'label' => 'Archiver / restaurer un fournisseur'],
        ];
    }
}
