#pragma once
#include "UI/menu.hpp"
#include "scene.hpp"
//! сцена ингрового процесса
class Scene_pause : public Scene {
protected:
  Menu menu = {};
  bool ifSelected = false; ///< if 1, item selected
  Image ground = {};
public:
  Scene_pause(CN(Scene_pause)) = delete;
  Scene_pause& operator =(CN(Scene_pause)) = delete;
  explicit Scene_pause(Scene *pv = nullptr);
  ~Scene_pause() { a83::log("exit from scene PAUSE"); }
  void update(float dt) override {
    input();
    if (ifSelected) {
      menu.accept();
      ifSelected = false;
    }
    Scene::update(dt);
  }
  void draw() override;
private:
  void input();
};
Scene_pause::Scene_pause(Scene *pv): Scene(pv) {
  a83::log("goto scene PAUSE");
  // сохраняется затемнённый фон:
  ground.init(Game::screen);
  ground.add( -Color::WHITE2 / 2);
  // TODO localization
  menu.add(new item_text(U"Continue", []()->bool {
    Game::scene_state.push(scene_st::PREV);
    return false; }));
  menu.add(new item_text(U"Options", []()->bool {
    Game::scene_state.push(scene_st::OPTIONS);
    return false; }));
  menu.add(new item_text(U"Main menu", []()->bool {
    Game::scene_state.push(scene_st::PREVx2);
    return false; }));
  menu.add(new item_text(U"Exit game", []()->bool {
    Game::scene_state.push(scene_st::END);
    return false; }));
  menu.init(Game::screen.getX() / 2 - 35, Game::screen.getY() / 2 - 30,
    62,56, 5,5, 9);
}
void Scene_pause::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();
  // выбираем чё-нидь. когда будет в upd, выполнит действия из лябмд
  if (Game::menu_press(KEY_ENABLE)) ifSelected = true;
}

void Scene_pause::draw() {
  ground.print(0, 0, Game::screen);
  menu.print(Game::screen);
}