#include "StartMenuVisualizer.hpp"

void StartMenuVisualizer::GenerateElement() {
  BaseVisualizer::GenerateTopBottomBorder(MAX_MENU_WIDTH, true, false);

  BaseVisualizer::AddEmptyLines(2, MAX_MENU_WIDTH, false);

  for (const auto& str : StartMenuVisualizer::ACSII_ART_TURBO_SCHACH) {
    BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, str, false);
  }

  BaseVisualizer::AddEmptyLines(2, MAX_MENU_WIDTH, false);

  BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, "Welcome to TurboSchach!", false);

  BaseVisualizer::AddEmptyLines(2, MAX_MENU_WIDTH, false);

  BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, "Please select one of the menu options:", false);
  BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, "\x1B[s", false);

  BaseVisualizer::AddEmptyLines(1, MAX_MENU_WIDTH, false);

  // ToDo: Attribute zum direkten setzen des Types der Außenbegrenzung -> Allgemein in BaseVisualizer auch?
  // ToDo: Überarbeiten -> Extra Methode um Menus im Menu zu generieren
  BaseVisualizer::GenerateTopBottomBorder(24, true, true);
  BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, BaseVisualizer::display_vector[BaseVisualizer::display_vector.size()-1][0], false);
  BaseVisualizer::display_vector.erase(BaseVisualizer::display_vector.begin() + (BaseVisualizer::display_vector.size() - 2));


  for (const auto& str : StartMenuVisualizer::MENU_OPTIONS) {
    BaseVisualizer::GenerateBoxMenuLine(24, str, true, 1);
    BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, BaseVisualizer::display_vector[BaseVisualizer::display_vector.size()-1][0], false);
    BaseVisualizer::display_vector.erase(BaseVisualizer::display_vector.begin() + (BaseVisualizer::display_vector.size() - 2));

  }

  BaseVisualizer::GenerateTopBottomBorder(24, false, true);
  BaseVisualizer::GenerateCenteredString(MAX_MENU_WIDTH, BaseVisualizer::display_vector[BaseVisualizer::display_vector.size()-1][0], false);
  BaseVisualizer::display_vector.erase(BaseVisualizer::display_vector.begin() + (BaseVisualizer::display_vector.size() - 2));


  BaseVisualizer::AddEmptyLines(2, MAX_MENU_WIDTH, false);

  BaseVisualizer::GenerateTopBottomBorder(MAX_MENU_WIDTH, false, false);
}

int StartMenuVisualizer::GetSelectedOption() {
  return selectedOption;
}

void StartMenuVisualizer::SetSelectedOption(int optionSelect) {
  selectedOption = selectedOption;
};

void StartMenuVisualizer::DisplayElement1() {
  BaseVisualizer::ClearTerminal();
  int temp;
  for (const auto& row : display_vector) {
    for (const auto& cell : row) {
        std::cout << cell;
    }
    std::cout << std::endl;
  }
  std::cout << "\x1B[u";
  std::cin >> selectedOption;
}