package dev.lions.user.manager.enums.role;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.media.Schema;

/**
 * Type de rôle dans Keycloak
 * Distingue les rôles au niveau Realm vs Client
 */
@Getter
@RequiredArgsConstructor
@Schema(description = "Type de rôle Keycloak")
public enum TypeRole {

    /**
     * Rôle global au niveau du Realm
     * Applicable à tous les clients du realm
     */
    REALM_ROLE("Realm Role", "Rôle global applicable à tous les clients du realm", "realm-role"),

    /**
     * Rôle spécifique à un client
     * Limité au scope d'un client particulier
     */
    CLIENT_ROLE("Client Role", "Rôle spécifique à un client particulier", "client-role"),

    /**
     * Rôle composite (contient d'autres rôles)
     */
    COMPOSITE_ROLE("Composite Role", "Rôle composite contenant d'autres rôles", "composite-role");

    private final String libelle;
    private final String description;
    private final String codeKeycloak;

    /**
     * Détermine si le rôle est au niveau realm
     * @return true si c'est un realm role
     */
    public boolean isRealmRole() {
        return this == REALM_ROLE;
    }

    /**
     * Détermine si le rôle est au niveau client
     * @return true si c'est un client role
     */
    public boolean isClientRole() {
        return this == CLIENT_ROLE;
    }

    /**
     * Détermine si le rôle est composite
     * @return true si c'est un composite role
     */
    public boolean isComposite() {
        return this == COMPOSITE_ROLE;
    }
}
