#pragma once #include // Para std::array #include // Para std::string #include "utils.h" // Archivo de utilidades // Tamaño máximo del nombre constexpr size_t NAME_SIZE = 3; // 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() const { return trim(name_.substr(0, position_)); } // 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_` };