#pragma once #include #include "page_manager.h" #include "keybind_manager.h" #include "config/config_manager.h" #include "db/database_manager.h" #include "network/network_manager.h" #include "network/license_status.h" #include "audio/audio_manager.h" #include "audio/audio_downloader.h" struct AppState { SDL_Window* window = nullptr; SDL_Renderer* renderer = nullptr; PageManager pages; KeybindManager keybinds; radiantwave::config::ConfigManager config; radiantwave::db::DatabaseManager db; radiantwave::network::NetworkManager network; radiantwave::license::LicenseStatusTracker licenseTracker; radiantwave::audio::AudioManager audio; radiantwave::audio::AudioDownloader audioDownloader; bool quitRequested = false; // While >0, the app is fading audio out before quitting; decremented in // SDL_AppIterate until it reaches zero and teardown runs. float quitFadeRemaining = 0.0f; int currentMenuItem = 0; // First-Run walkthrough state (see provisioning.h). provisioningMode is // true only while a walkthrough step page is on the stack; it is cleared // when Home is reached. walkthroughInternetUp caches the step-1 result so // advancing past the WiFi page never re-runs a blocking probe. bool provisioningMode = false; bool walkthroughInternetUp = false; // Placeholder flag raised when the device is brand-new (no internet, no // email, no license). Will later launch the first-run welcome walkthrough // (TOS, quick user guide, ...). bool firstRunWalkthrough = false; };