#pragma once
#include "scene.hpp"
#include "UI/menu.hpp"
#include "game/game-config.hpp"
/** Cцена настроек игры
*@details Меню слева для выбора подменю справа */
class Scene_options : public Scene {
protected:
  Menu menu = {};
  bool ifSelected = false; ///< if 1, item selected
public:
  explicit Scene_options(Scene *pv = nullptr);
  ~Scene_options() { 
    a83::log("exit from scene OPTIONS");
    // сохранить изменения в настройках
    Game::config.save(Game::current_dir + "config.yml");
  }
  void draw() override;
  void update(float dt) override {
    input();
    if (ifSelected) {
      menu.accept();
      ifSelected = false;
    }
    Scene::update(dt);
  }
private:
  void input();
  nocopy(Scene_options);
};
Scene_options::Scene_options(Scene *pv): Scene(pv) {
  a83::log("goto scene OPTIONS");
  // TODO localization
  menu.add(new item_text(U"Input", []()->bool {
    return true; // TODO
  }));
  menu.add(new item_text(U"Sound", []()->bool {
    return true; // TODO
  }));
  menu.add(new item_text(U"Graphic", []()->bool {
    Game::scene_state.push(scene_st::GRAPHIC);
    return false;
  }));
  menu.add(new item_text(U"Back", []()->bool {
    Game::scene_state.push(scene_st::PREV);
    return false;
  }));
  menu.init(5,20, 160,60, 5,5, 10);
}
void Scene_options::input() {
  // выйти назад
  if (Game::menu_press(KEY_ESCAPE))
    set_scene(scene_st::PREV);
  if (Game::menu_press(KEY_UP))
    menu.up();
  if (Game::menu_press(KEY_DOWN))
    menu.down();
  if (Game::menu_press(KEY_LEFT))
    menu.param_plus();
  if (Game::menu_press(KEY_RIGHT))
    menu.param_sub();
  // выбираем чё-нидь:
  if (Game::menu_press(KEY_ENABLE)) {
    // когда будет в upd, выполнит действия из лябмд
    ifSelected = true;
  } // enter
}

void Scene_options::draw() {
  Game::screen.clear(); // фон чёрный
  menu.print(Game::screen);
}
