#pragma once #include // Para size_t #include // Para array #include // Para string, basic_string #include "utils.h" // Para trim // Tamaño máximo del nombre constexpr size_t NAME_SIZE = 5; // Clase EnterName class EnterName { public: EnterName(); ~EnterName() = default; void init(const std::string &name = ""); // Inicializa con un nombre opcional void incPosition(); // Incrementa la posición del carácter actual void decPosition(); // Decrementa la posición del carácter actual void incIndex(); // Incrementa el índice del carácter en la lista void decIndex(); // Decrementa el índice del carácter en la lista std::string getFinalName(); // Obtiene el nombre final introducido std::string getCurrentName() const { return trim(name_); } // Obtiene el nombre actual en proceso int getPosition() const { return position_; } // Posición actual del carácter editado bool getPositionOverflow() const { return position_overflow_; } // Indica si la posición excede el límite private: std::string character_list_; // Lista de caracteres permitidos std::string name_; // Nombre en proceso size_t position_ = 0; // Índice del carácter que se edita bool position_overflow_ = false; // Flag para exceder límite std::array character_index_; // Índices a "character_list_" void updateNameFromCharacterIndex(); // Actualiza "name_" según "character_index_" void initCharacterIndex(const std::string &name); // Inicializa índices desde el nombre int findIndex(char character) const; // Busca el índice de un carácter en "character_list_" static std::string getRandomName(); // Devuelve un nombre al azar };