#pragma once #include // Para function #include // Para string #include // Para unordered_map #include // Para vector // Definición de un comando de consola (metadatos cargados desde YAML) struct CommandDef { std::string keyword; std::string handler_id; std::string category; std::string description; std::string usage; bool instant{false}; bool hidden{false}; bool debug_only{false}; bool help_hidden{false}; bool dynamic_completions{false}; std::unordered_map> completions; }; // Tipo de función handler para comandos using CommandHandler = std::function& args)>; // Proveedor de completions dinámicas: devuelve las opciones para TAB en UPPERCASE using DynamicCompletionProvider = std::function()>; // Registro de comandos: une metadatos YAML con handlers C++ class CommandRegistry { public: // Carga los metadatos de comandos desde un archivo YAML y registra los handlers void load(const std::string& yaml_path); // Búsqueda y ejecución [[nodiscard]] auto findCommand(const std::string& keyword) const -> const CommandDef*; auto execute(const std::string& keyword, const std::vector& args) const -> std::string; // Generación de ayuda (auto-generada desde los metadatos) [[nodiscard]] auto generateTerminalHelp() const -> std::string; [[nodiscard]] auto generateConsoleHelp() const -> std::string; // TAB completion // Devuelve las opciones de completado para un path dado (ej: "SHADER", "SHADER PRESET") // Combina completions estáticas del YAML con dinámicas registradas en C++ [[nodiscard]] auto getCompletions(const std::string& path) const -> std::vector; [[nodiscard]] auto getVisibleKeywords() const -> std::vector; private: std::vector commands_; std::unordered_map handlers_; std::unordered_map> completions_map_; std::unordered_map dynamic_providers_; void registerHandlers(); };