You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
4.0 KiB

"""
Profile Stats Screen
Display detailed statistics for the active user profile
"""
from .base_screen import BaseScreen
class ProfileStatsScreen(BaseScreen):
"""Profile statistics display screen implementation"""
def render(self) -> None:
"""Render detailed profile statistics"""
if not self.data_manager.active_profile:
self.screen_manager.set_screen("main_menu")
return
stats_data = self.data_manager.get_profile_stats(self.data_manager.active_profile)
if not stats_data:
self.screen_manager.set_screen("main_menu")
return
profile = stats_data['profile']
# Header
self.ui_renderer.draw_header(f"Stats: {profile.name}")
# Stats panel
self.ui_renderer.draw_panel(50, 90, 540, 260, 'dark_gray', 'gray')
# Render statistics content
self._render_local_statistics(stats_data, profile)
self._render_server_status(stats_data)
self._render_settings_summary(profile)
# Back button
back_selected = (self.selected_index == 0)
self.ui_renderer.draw_button("← Back", 270, 370, 100, 30, back_selected)
self.ui_renderer.draw_footer_help(self.get_help_text())
def _render_local_statistics(self, stats_data, profile) -> None:
"""Render local profile statistics"""
y = 110
self.ui_renderer.draw_text("Local Statistics:", 60, y, 'light_blue', 'medium')
y += 25
stats = [
f"Games Played: {profile.games_played}",
f"Best Score: {profile.best_score}",
f"Total Score: {profile.total_score}",
f"Achievements: {len(profile.achievements)}",
f"Created: {stats_data['created_formatted']}",
f"Last Played: {stats_data['last_played_formatted']}"
]
for stat in stats:
self.ui_renderer.draw_text(stat, 70, y, 'light_gray', 'small')
y += 20
def _render_server_status(self, stats_data) -> None:
"""Render server connection and sync status"""
y = 250
if stats_data['api_enabled']:
self.ui_renderer.draw_text("Server Status:", 60, y, 'light_green', 'medium')
y += 20
integration_info = stats_data['integration_info']
device_id = integration_info.get('device_id', 'Unknown')
self.ui_renderer.draw_text(f"Device ID: {device_id}", 70, y, 'light_gray', 'small')
y += 20
self.ui_renderer.draw_text("✓ Profile synced with server", 70, y, 'light_green', 'small')
else:
self.ui_renderer.draw_text("Server Status:", 60, y, 'red', 'medium')
y += 20
self.ui_renderer.draw_text("✗ Server offline", 70, y, 'red', 'small')
def _render_settings_summary(self, profile) -> None:
"""Render current profile settings summary"""
settings_x = 350
y = 110
self.ui_renderer.draw_text("Current Settings:", settings_x, y, 'light_blue', 'medium')
y += 25
settings_display = [
f"Difficulty: {profile.settings.get('difficulty', 'normal').title()}",
f"Sound Volume: {profile.settings.get('sound_volume', 50)}%",
f"Music Volume: {profile.settings.get('music_volume', 50)}%",
f"Screen Shake: {'On' if profile.settings.get('screen_shake', True) else 'Off'}"
]
for setting in settings_display:
self.ui_renderer.draw_text(setting, settings_x + 10, y, 'light_gray', 'small')
y += 20
def handle_input(self, action: str) -> bool:
"""Handle profile stats input"""
if action == 'confirm' or action == 'back':
self.handle_back()
return True
return False
def get_help_text(self) -> str:
"""Get help text for profile stats"""
return "Enter: Back • Escape: Back to Main Menu"