#ifndef STARTMENUVISUALIZER_H
#define STARTMENUVISUALIZER_H

#include "BaseVisualizer.hpp"

class StartMenuVisualizer : public BaseVisualizer {
  private:
    inline static const std::vector<std::string> ACSII_ART_TURBO_SCHACH = {
      "████████╗██╗░░░██╗██████╗░██████╗░░█████╗░░██████╗░█████╗░██╗░░██╗░█████╗░░█████╗░██╗░░██╗",
      "╚══██╔══╝██║░░░██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗██║░░██║██╔══██╗██╔══██╗██║░░██║",
      "░░░██║░░░██║░░░██║██████╔╝██████╦╝██║░░██║╚█████╗░██║░░╚═╝███████║███████║██║░░╚═╝███████║",
      "░░░██║░░░██║░░░██║██╔══██╗██╔══██╗██║░░██║░╚═══██╗██║░░██╗██╔══██║██╔══██║██║░░██╗██╔══██║",
      "░░░██║░░░╚██████╔╝██║░░██║██████╦╝╚█████╔╝██████╔╝╚█████╔╝██║░░██║██║░░██║╚█████╔╝██║░░██║",
      "░░░╚═╝░░░░╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝░░╚═╝░╚════╝░╚═╝░░╚═╝"
    };

    inline static const std::vector<std::string> MENU_OPTIONS = {
      "1 - New Game",
      "2 - Load Save",
      "3 - Instructions",
      "",
      "0 - Exit"
    };

    int selectedOption = -1;

    void GenerateElement() override;

  public:
    StartMenuVisualizer(size_t padding) : BaseVisualizer(BaseVisualizer::CountVisibleCharacters(StartMenuVisualizer::ACSII_ART_TURBO_SCHACH[0]), padding) {
      StartMenuVisualizer::GenerateElement();
    }
    int GetSelectedOption();
    void SetSelectedOption(int selectedOption);
    void DisplayElement1();

};

#endif //STARTMENUVISUALIZER_H