#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include namespace vamp_zero { struct ui_runtime; class score_loader; class zero_ui { public: zero_ui(boost::asio::any_io_executor executor, luma::application_config config, vamp_zero::database_config database, std::string assets_path, std::function command_handler = {}, std::function menu_handler = {}, std::optional score_worker = {}); ~zero_ui(); zero_ui(zero_ui const &) = delete; auto operator=(zero_ui const &) -> zero_ui & = delete; auto run() -> std::expected; auto stop() -> void; auto publish(vamp_zero::app_state state) -> std::expected; auto selected_score_loader() const -> std::shared_ptr; private: std::shared_ptr application_; std::shared_ptr runtime_; std::shared_ptr score_loader_; }; }