package fr.luc.bettermccommands.api.suggestion; import fr.luc.bettermccommands.api.CommandContext; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * Fournisseur dynamique de suggestions pour l'auto-complétion (Tab-Complete). */ @FunctionalInterface public interface SuggestionProvider { /** * Calcule et retourne la liste des suggestions pour un argument donné dans un contexte précis. * * @param context Le contexte actuel de la commande. * @param currentInput La saisie en cours de frappe par l'utilisateur. * @return La collection de suggestions correspondantes. */ Collection getSuggestions(CommandContext context, String currentInput); /** * Crée un fournisseur à partir d'une liste statique de chaînes de caractères. * * @param values Les valeurs possibles. * @return Un {@link SuggestionProvider} filtrant les valeurs par préfixe insensible à la casse. */ static SuggestionProvider strings(String... values) { return strings(Arrays.asList(values)); } /** * Crée un fournisseur à partir d'une collection statique de chaînes. * * @param values La collection de valeurs textuelles. * @return Un {@link SuggestionProvider} filtrant par préfixe. */ static SuggestionProvider strings(Collection values) { return (context, currentInput) -> { String lower = currentInput == null ? "" : currentInput.toLowerCase(); return values.stream() .filter(v -> v.toLowerCase().startsWith(lower)) .map(Suggestion::of) .collect(Collectors.toList()); }; } /** * Crée un fournisseur vide ne retournant aucune suggestion. * * @return Un {@link SuggestionProvider} vide. */ static SuggestionProvider empty() { return (context, currentInput) -> List.of(); } }