from typing import TYPE_CHECKING from PyQt6.QtWidgets import QMessageBox, QDialog from warchron.constants import RefreshScope if TYPE_CHECKING: from warchron.controller.app_controller import AppController from warchron.view.player_dialog import PlayerDialog class PlayerController: def __init__(self, app: "AppController"): self.app: AppController = app def _validate_player_inputs(self, name: str) -> bool: if not name.strip(): QMessageBox.warning( self.app.view, "Invalid name", "Player name cannot be empty." ) return False return True def add_player(self) -> None: dialog = PlayerDialog(self.app.view) result = dialog.exec() # modal blocking dialog if result == QDialog.DialogCode.Accepted: name = dialog.get_player_name() if not self._validate_player_inputs(name): return self.app.model.add_player(name) self.app.is_dirty = True self.app.navigation.refresh(RefreshScope.PLAYERS_LIST) def edit_player(self, player_id: str) -> None: play = self.app.model.get_player(player_id) player_dialog = PlayerDialog(self.app.view, default_name=play.name) if player_dialog.exec() == QDialog.DialogCode.Accepted: name = player_dialog.get_player_name() if not self._validate_player_inputs(name): return self.app.model.update_player(player_id, name=name) # Propagate update to participants self.app.navigation.refresh(RefreshScope.CURRENT_SELECTION_DETAILS)