#pragma once

#include <memory>

class App;
class AppRuntime;
class WacomTablet;

namespace pp::platform::windows {

[[nodiscard]] App& initialize_bound_app_runtime();
void bind_app(App* app) noexcept;
[[nodiscard]] App* bound_app() noexcept;
void release_bound_app() noexcept;
void shutdown_bound_app_runtime() noexcept;
[[nodiscard]] WacomTablet* bound_wacom_tablet() noexcept;
[[nodiscard]] std::unique_ptr<App>& retained_owned_app() noexcept;
[[nodiscard]] WacomTablet& retained_wacom_tablet() noexcept;
[[nodiscard]] AppRuntime* retained_bound_runtime() noexcept;
void bind_runtime(AppRuntime* runtime) noexcept;

}
