#pragma once

#include "../Core/Menu.h"

#include <map>
#include <string>


/**
 * Textual interface for the app
 */
class TextApp {
    private:
        Menu gameMenu;                          // the interface with the core of the app
        std::map<std::string, Action> keybinds; // what the player needs to type to perform in-game actions

    public:
        /**
         * Initializes the app with default settings
         */
        TextApp();

        /**
         * Runs the app
         */
        void run();
    
    private:
        /**
         * Sub-menu to select which pieces to play with
         */
        void choosePieces();

        /**
         * Sub-menu to change the size of the board
         */
        void chooseBoardSize();

        /**
         * Sub-menu to see the in-game controls
         */
        void seeKeybinds() const;

        /**
         * Sets the controls to their default values
         */
        void defaultKeybinds();

        /**
         * Starts a new game with the current settings
         */
        void startGame() const;

        /**
         * Prints the current state of a game to the console
         */
        void printGame(const Game& game) const;
};
