import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;

public class Capitulo14Generics {
    interface Comando {
        String executar();
    }

    private final Map<String, Comando> comandos = new LinkedHashMap<>();

    void registrar(String nome, Comando comando) {
        String chave = nome.toLowerCase(Locale.ROOT);
        if (comandos.putIfAbsent(chave, comando) != null) {
            throw new IllegalArgumentException("Comando duplicado.");
        }
    }

    String processar(String entrada) {
        Comando comando =
                comandos.get(entrada.strip().toLowerCase(Locale.ROOT));
        return comando == null ? "Comando desconhecido." : comando.executar();
    }

    public static void main(String[] args) {
        Capitulo14Generics registro = new Capitulo14Generics();
        registro.registrar("ajuda", () -> "Comandos disponíveis.");
        registro.registrar("dica", () -> "Use Map para localizar por chave.");
        System.out.println(registro.processar("DICA"));
    }
}
