#pragma once

#include <string>

constexpr int NAME_LENGHT = 8;

/*
    Un array, "characterList", contiene la lista de caracteres
    Un segundo array, "characterIndex", contiene el indice a "characterList" de cada una de las letras que conforman el nombre
    "pos" es la posición de "characterIndex" que se está modificando
    Izquierda o derecha modifican "pos", arriba o abajo modifican el índice de "characterIndex[pos]"
    Pulsar cualquier botón, mueve "pos" a la derecha. Al pulsar el botón en la ´´ultima posición se finaliza la introducción de nombres
*/

// Clase EnterName
class EnterName
{
private:
    std::string character_list_;               // Lista de todos los caracteres permitidos
    std::string name_;                         // Nombre introducido
    int position_;                             // Posición a editar del nombre
    int num_characters_;                       // Cantidad de caracteres de la lista de caracteres
    int character_index_[NAME_LENGHT];         // Indice de la lista para cada uno de los caracteres que forman el nombre
    bool position_has_been_used_[NAME_LENGHT]; // Indica si en esa posición se ha puesto ya alguna letra. Se utiliza para replicar la letra anterior la primera vez

    // Actualiza el nombre a partir de la lista de índices
    void updateName();

    // Actualiza la variable
    void updateCharacterIndex();

    // Encuentra el indice de un caracter en "characterList"
    int findIndex(char character) const;

    // Comprueba la posición y copia el caracter si es necesario
    void checkIfPositionHasBeenUsed();

public:
    // Constructor
    EnterName();

    // Destructor
    ~EnterName() = default;

    // Inicializa el objeto
    void init();

    // Incrementa la posición
    void incPosition();

    // Decrementa la posición
    void decPosition();

    // Incrementa el índice
    void incIndex();

    // Decrementa el índice
    void decIndex();

    // Obtiene el nombre
    std::string getName() const;

    // Obtiene la posición que se está editando
    int getPosition() const;
};