#pragma once #include "auth/auth_handler.hpp" #include #include #include namespace wowee { namespace ui { /** * Realm selection screen UI * * Displays available realms and allows user to select one */ class RealmScreen { public: RealmScreen(); /** * Render the UI * @param authHandler Reference to auth handler */ void render(auth::AuthHandler& authHandler); /** * Set callback for realm selection * @param callback Function to call when realm is selected (receives realm name and address) */ void setOnRealmSelected(std::function callback) { onRealmSelected = callback; } void setOnBack(std::function cb) { onBack = std::move(cb); } /** * Reset selection state (e.g., when switching servers) */ void reset() { selectedRealmIndex = -1; realmSelected = false; autoSelectAttempted = false; selectedRealmName.clear(); selectedRealmAddress.clear(); statusMessage.clear(); } /** * Check if a realm has been selected */ bool hasSelection() const { return realmSelected; } /** * Get selected realm info */ const std::string& getSelectedName() const { return selectedRealmName; } const std::string& getSelectedAddress() const { return selectedRealmAddress; } private: // UI state int selectedRealmIndex = -1; bool realmSelected = false; bool autoSelectAttempted = false; std::string selectedRealmName; std::string selectedRealmAddress; // Status std::string statusMessage; // Callbacks std::function onRealmSelected; std::function onBack; /** * Update status message */ void setStatus(const std::string& message); /** * Get realm status text */ const char* getRealmStatus(uint8_t flags) const; /** * Get population color */ ImVec4 getPopulationColor(float population) const; }; }} // namespace wowee::ui