<?php

declare(strict_types=1);

namespace App\Module\Core\Domain\Repository;

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

interface UserRepositoryInterface
{
    public function findById(int $id): ?User;

    public function findByUsername(string $username): ?User;

    public function save(User $user): void;

    /**
     * Retourne le nombre d'utilisateurs ayant le flag isAdmin a true.
     *
     * Utilise par AdminHeadcountGuard pour verifier l'invariant
     * "au moins un administrateur doit rester sur l'instance".
     */
    public function countAdmins(): int;
}
