package dev.lions.user.manager.resource;

import dev.lions.user.manager.api.RealmResourceApi;
import dev.lions.user.manager.client.KeycloakAdminClient;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.annotation.security.RolesAllowed;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * Ressource REST pour la gestion des realms Keycloak
 * Implémente l'interface API commune.
 */
@Slf4j
@jakarta.enterprise.context.ApplicationScoped
@jakarta.ws.rs.Path("/api/realms")
public class RealmResource implements RealmResourceApi {

    @Inject
    KeycloakAdminClient keycloakAdminClient;

    @Inject
    SecurityIdentity securityIdentity;

    @Override
    @RolesAllowed({ "admin", "user_manager", "user_viewer", "role_manager", "role_viewer" })
    public List<String> getAllRealms() {
        log.info("GET /api/realms/list");

        try {
            List<String> realms = keycloakAdminClient.getAllRealms();
            log.info("Récupération réussie: {} realms trouvés", realms.size());
            return realms;
        } catch (Exception e) {
            log.error("Erreur lors de la récupération des realms", e);
            throw new RuntimeException("Erreur lors de la récupération des realms: " + e.getMessage(), e);
        }
    }

    @Override
    @RolesAllowed({ "admin", "user_manager", "role_manager", "role_viewer" })
    public List<String> getRealmClients(String realmName) {
        log.info("GET /api/realms/{}/clients", realmName);

        try {
            List<String> clients = keycloakAdminClient.getRealmClients(realmName);
            log.info("Récupération réussie: {} clients trouvés pour le realm {}", clients.size(), realmName);
            return clients;
        } catch (Exception e) {
            log.error("Erreur lors de la récupération des clients du realm {}", realmName, e);
            throw new RuntimeException("Erreur lors de la récupération des clients: " + e.getMessage(), e);
        }
    }
}
