package dev.lions.user.manager.client;

import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.resource.RealmResource;
import org.keycloak.admin.client.resource.UsersResource;
import org.keycloak.admin.client.resource.RolesResource;

/**
 * Interface pour le client Keycloak Admin
 * Abstraction pour faciliter les tests et la gestion du cycle de vie
 */
public interface KeycloakAdminClient {

    /**
     * Récupère l'instance Keycloak
     * @return instance Keycloak
     */
    Keycloak getInstance();

    /**
     * Récupère une ressource Realm
     * @param realmName nom du realm
     * @return RealmResource
     */
    RealmResource getRealm(String realmName);

    /**
     * Récupère la ressource Users d'un realm
     * @param realmName nom du realm
     * @return UsersResource
     */
    UsersResource getUsers(String realmName);

    /**
     * Récupère la ressource Roles d'un realm
     * @param realmName nom du realm
     * @return RolesResource
     */
    RolesResource getRoles(String realmName);

    /**
     * Vérifie si la connexion à Keycloak est active
     * @return true si connecté
     */
    boolean isConnected();

    /**
     * Vérifie si un realm existe
     * @param realmName nom du realm
     * @return true si le realm existe
     */
    boolean realmExists(String realmName);

    /**
     * Ferme la connexion Keycloak
     */
    void close();

    /**
     * Force la reconnexion
     */
    void reconnect();
}
