package dev.lions.user.manager.service;

import jakarta.validation.constraints.NotBlank;

import java.util.Map;

/**
 * Service de synchronisation avec Keycloak
 * Permet la synchronisation des données entre différents realms
 */
public interface SyncService {

    /**
     * Synchronise les utilisateurs d'un realm
     * @param realmName nom du realm à synchroniser
     * @return nombre d'utilisateurs synchronisés
     */
    int syncUsersFromRealm(@NotBlank String realmName);

    /**
     * Synchronise les rôles d'un realm
     * @param realmName nom du realm à synchroniser
     * @return nombre de rôles synchronisés
     */
    int syncRolesFromRealm(@NotBlank String realmName);

    /**
     * Synchronise tous les realms configurés
     * @return map realm -> nombre d'éléments synchronisés
     */
    Map<String, Integer> syncAllRealms();

    /**
     * Vérifie la cohérence des données entre cache local et Keycloak
     * @param realmName nom du realm
     * @return rapport de cohérence
     */
    Map<String, Object> checkDataConsistency(@NotBlank String realmName);

    /**
     * Force la resynchronisation complète d'un realm
     * @param realmName nom du realm
     * @return statistiques de synchronisation
     */
    Map<String, Object> forceSyncRealm(@NotBlank String realmName);

    /**
     * Récupère le statut de la dernière synchronisation
     * @param realmName nom du realm
     * @return statut de synchronisation
     */
    Map<String, Object> getLastSyncStatus(@NotBlank String realmName);

    /**
     * Vérifie la disponibilité de Keycloak
     * @return true si Keycloak est disponible
     */
    boolean isKeycloakAvailable();

    /**
     * Récupère les informations de santé de Keycloak
     * @return informations de santé
     */
    Map<String, Object> getKeycloakHealthInfo();
}
