package dev.lions.user.manager.security;

import io.quarkus.security.identity.AuthenticationRequestContext;
import io.quarkus.security.identity.SecurityIdentity;
import io.quarkus.security.identity.SecurityIdentityAugmentor;
import io.quarkus.security.runtime.QuarkusSecurityIdentity;
import io.quarkus.arc.profile.IfBuildProfile;
import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.inject.ConfigProperty;

import java.util.Set;

/**
 * Augmenteur de sécurité pour le mode DEV
 * Ajoute automatiquement les rôles admin et user_manager à toutes les requêtes
 * Permet de tester l'API sans authentification Keycloak
 */
@ApplicationScoped
@IfBuildProfile("dev")
public class DevModeSecurityAugmentor implements SecurityIdentityAugmentor {

    @ConfigProperty(name = "quarkus.oidc.enabled", defaultValue = "true")
    boolean oidcEnabled;

    @Override
    public Uni<SecurityIdentity> augment(SecurityIdentity identity, AuthenticationRequestContext context) {
        // Seulement actif si OIDC est désactivé (mode DEV)
        if (!oidcEnabled && identity.isAnonymous()) {
            // Créer une identité avec les rôles nécessaires pour DEV
            return Uni.createFrom().item(QuarkusSecurityIdentity.builder(identity)
                    .setPrincipal(() -> "dev-user")
                    .addRoles(Set.of("admin", "user_manager", "user_viewer"))
                    .build());
        }
        return Uni.createFrom().item(identity);
    }
}
