#pragma once

#include <memory>
#include <vector>

#include <imgui.h>

#include "app.hh"


namespace pg {

class Initiator final : App {
 public:
  Initiator() noexcept {
  }

  void Update() noexcept override {
    if (ImGui::BeginMainMenuBar()) {
      if (ImGui::BeginMenu("Apps")) {
        for (const auto& type : registry()) {
          if (ImGui::MenuItem(type.first.c_str())) {
            apps_.push_back(type.second->Create());
          }
        }
        ImGui::EndMenu();
      }
      ImGui::EndMainMenuBar();
    }
    for (auto& app : apps_) {
      app->Update();
    }
  }

 private:
  std::vector<std::unique_ptr<App>> apps_;
};

}  // namespace pg