package dev.lions.user.manager.config;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.jackson.ObjectMapperCustomizer;
import jakarta.inject.Singleton;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;

/**
 * Customizer pour Jackson afin d'ignorer les propriétés inconnues dans les
 * représentations Keycloak.
 * Cela évite les erreurs de désérialisation (comme bruteForceStrategy) lorsque
 * le serveur Keycloak
 * est plus récent que les bibliothèques clients.
 */
@Singleton
public class KeycloakJacksonCustomizer implements ObjectMapperCustomizer {

    @Override
    public void customize(ObjectMapper objectMapper) {
        // En plus de la configuration globale, on force les Mix-ins pour les classes
        // Keycloak critiques
        objectMapper.addMixIn(RealmRepresentation.class, IgnoreUnknownMixin.class);
        objectMapper.addMixIn(UserRepresentation.class, IgnoreUnknownMixin.class);
        objectMapper.addMixIn(RoleRepresentation.class, IgnoreUnknownMixin.class);
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    abstract static class IgnoreUnknownMixin {
    }
}
