package fr.luc.gamingcore.model;

/**
 * Énumération des permissions granulaires attribuables aux rangs de guilde.
 */
public enum GuildPermission {

    // --- Gestion Territoriale ---
    /**
     * Permet de revendiquer (claim) un nouveau chunk pour la guilde.
     */
    CLAIM("Revendiquer un chunk", "Territoire"),

    /**
     * Permet d'abandonner (unclaim) un chunk possédé par la guilde.
     */
    UNCLAIM("Libérer un chunk", "Territoire"),

    /**
     * Permet de définir le point de ralliement (home) de la guilde.
     */
    SET_HOME("Définir le home de guilde", "Territoire"),

    /**
     * Permet de se téléporter au point de ralliement de la guilde.
     */
    HOME("Se téléporter au home de guilde", "Territoire"),

    // --- Gestion des Membres ---
    /**
     * Permet d'inviter de nouveaux joueurs à rejoindre la guilde.
     */
    INVITE("Inviter des joueurs", "Membres"),

    /**
     * Permet d'expulser un membre ayant un rang strictement inférieur.
     */
    KICK("Expulser des membres", "Membres"),

    /**
     * Permet de promouvoir un membre à un rang supérieur (inférieur au sien).
     */
    PROMOTE("Promouvoir des membres", "Membres"),

    /**
     * Permet de rétrograder le rang d'un membre inférieur.
     */
    DEMOTE("Rétrograder des membres", "Membres"),

    // --- Administration Interne ---
    /**
     * Permet de créer, modifier, renommer et configurer les permissions des rangs de la guilde.
     */
    MANAGE_RANKS("Gérer les rangs et permissions", "Administration"),

    /**
     * Permet de modifier les informations de la guilde (description, tag).
     */
    MANAGE_GUILD("Modifier les infos de guilde", "Administration"),

    // --- Gestion Économique ---
    /**
     * Permet de déposer de l'argent dans la banque de guilde.
     */
    BANK_DEPOSIT("Déposer dans la banque", "Économie"),

    /**
     * Permet de retirer de l'argent depuis la banque de guilde.
     */
    BANK_WITHDRAW("Retirer de la banque", "Économie"),

    // --- Interactions dans les Claims ---
    /**
     * Permet de poser des blocs dans les territoires de la guilde.
     */
    BUILD("Poser des blocs", "Interactions"),

    /**
     * Permet de casser des blocs dans les territoires de la guilde.
     */
    BREAK("Casser des blocs", "Interactions"),

    /**
     * Permet d'interagir avec les portes, boutons, leviers et trappes.
     */
    INTERACT("Utiliser portes / boutons / leviers", "Interactions"),

    /**
     * Permet d'ouvrir les conteneurs (coffres, fours, shulkers, barils).
     */
    CONTAINER("Ouvrir les coffres et conteneurs", "Interactions");

    private final String description;
    private final String category;

    GuildPermission(String description, String category) {
        this.description = description;
        this.category = category;
    }

    /**
     * Obtient la description textuelle lisible de la permission.
     *
     * @return La description en français de la permission.
     */
    public String getDescription() {
        return description;
    }

    /**
     * Obtient la catégorie thématique de la permission.
     *
     * @return Le nom de la catégorie (ex: Territoire, Membres, Économie).
     */
    public String getCategory() {
        return category;
    }
}
