<?php

declare(strict_types=1);

namespace App\Module\Core\Domain\Repository;

use App\Module\Core\Domain\Entity\Permission;

/**
 * Contrat du catalogue de permissions RBAC.
 *
 * Utilise par la commande de synchronisation (app:sync-permissions), les
 * fixtures, et — a terme (ticket #345) — par le PermissionVoter pour valider
 * que les codes verifies existent bien dans le catalogue.
 */
interface PermissionRepositoryInterface
{
    public function findById(int $id): ?Permission;

    public function findByCode(string $code): ?Permission;

    /**
     * @return array<int, Permission>
     */
    public function findAll(): array;

    /**
     * @return array<int, string> liste des codes connus, pour la commande de sync et le futur voter
     */
    public function findAllCodes(): array;

    public function save(Permission $permission): void;
}
