# Profile Manager Screen Modules

This folder contains individual screen modules for the Profile Manager, providing a clean separation of concerns and modular architecture.

## Structure

```
screens/
├── __init__.py                 # Module exports
├── base_screen.py              # Abstract base class for all screens
├── screen_manager.py           # Manages screen modules and navigation
├── main_menu_screen.py         # Main menu interface
├── profile_list_screen.py      # Profile selection and management
├── create_profile_screen.py    # Profile creation with virtual keyboard
├── edit_profile_screen.py      # Profile settings editing
├── leaderboard_screen.py       # Leaderboard display (device/global)
├── profile_stats_screen.py     # Detailed profile statistics
└── README.md                   # This file
```

## Architecture

### BaseScreen
- Abstract base class providing common interface
- Standard navigation methods (up, down, left, right)
- Input handling framework
- State management utilities

### Screen Modules
Each screen is a self-contained module with:
- **Rendering**: Complete screen display logic
- **Input Handling**: Screen-specific input processing
- **State Management**: Internal state tracking
- **Navigation**: Transitions to other screens

### ModularScreenManager
- Manages all screen module instances
- Handles screen transitions
- Provides error dialog overlay
- Maintains current screen state

## Usage

### Adding New Screens

1. **Create Screen Module**:
```python
from .base_screen import BaseScreen

class NewScreen(BaseScreen):
    def render(self) -> None:
        # Implement rendering logic
        pass
    
    def handle_input(self, action: str) -> bool:
        # Implement input handling
        pass
```

2. **Register in ScreenManager**:
```python
# In screen_manager.py _initialize_screens()
"new_screen": NewScreen(self.data_manager, self.ui_renderer, self)
```

3. **Add to Exports**:
```python
# In __init__.py
from .new_screen import NewScreen
```

### Screen Integration

To integrate with the main Profile Manager:

```python
from screens import ModularScreenManager

# Replace existing screen manager
self.screen_manager = ModularScreenManager(self.data_manager, self.ui_renderer)

# Handle input
result = self.screen_manager.handle_input(action)

# Render
self.screen_manager.render()
```

## Screen Responsibilities

### MainMenuScreen
- Primary navigation hub
- Profile status display
- API connection status
- Menu option availability

### ProfileListScreen
- Display existing profiles
- Profile selection
- Profile deletion
- Active profile indication

### CreateProfileScreen
- Virtual keyboard interface
- Profile name input
- Input validation
- Profile creation

### EditProfileScreen
- Settings adjustment interface
- Real-time value display
- Setting validation
- Changes persistence

### LeaderboardScreen
- Leaderboard data display
- Device/Global toggle
- Data refresh functionality
- User highlighting

### ProfileStatsScreen
- Comprehensive statistics
- Server sync status
- Settings summary
- Achievements display

## Benefits

### Modularity
- Each screen is independent and testable
- Clear separation of concerns
- Easy to add/remove/modify screens

### Maintainability
- Isolated screen logic
- Consistent interface pattern
- Reduced coupling between screens

### Extensibility
- Simple to add new screens
- Common functionality in base class
- Flexible navigation system

### Testability
- Individual screen unit tests
- Mock dependencies easily
- Isolated functionality testing

## Navigation Flow

```
Main Menu ─┬─ Create Profile
           ├─ Profile List
           ├─ Edit Profile (if profile active)
           ├─ Leaderboard (if API enabled)
           ├─ Profile Stats (if profile active)
           └─ Exit

All screens ─→ Back to Main Menu (ESC)
```

## Input Actions

Standard actions handled by screens:
- `up`: Navigate selection up
- `down`: Navigate selection down  
- `left`: Navigate left / Adjust setting
- `right`: Navigate right / Adjust setting
- `confirm`: Confirm selection / Enter
- `back`: Return to previous screen / ESC
- `delete`: Delete item / Backspace

## Error Handling

Screens can show error messages via:
```python
self.show_error("Error message")
```

The ModularScreenManager handles error dialog display and auto-dismissal.
