#pragma once

#include <string>

#define 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 characterList;       // Lista de todos los caracteres permitidos
    std::string name;                // Nombre introducido
    int pos;                         // Posición a editar del nombre
    int numCharacters;               // Cantidad de caracteres de la lista de caracteres
    int characterIndex[NAME_LENGHT]; // Indice de la lista para cada uno de los caracteres que forman el nombre

    // Actualiza la variable
    void updateName();

    // Actualiza la variable
    void updateCharacterIndex();

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

public:
    // Constructor
    EnterName();

    // Destructor
    ~EnterName() = default;

    // Inicializa el objeto
    void init();

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

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

    // 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 getPos() const;
};