"""Laufzeitdaten (letzter Spielername). Alles, was zur Laufzeit geschrieben wird, landet in ``runtime/`` – dieser Ordner ist in ``.gitignore`` eingetragen. Über die Umgebungsvariable ``HAG_RUNTIME_DIR`` lässt sich der Ort umbiegen (praktisch für Tests). """ from __future__ import annotations import json import os from pathlib import Path from . import config LAST_PLAYER_FILE = "last_player.json" def runtime_dir() -> Path: """Verzeichnis für Laufzeitdaten; wird bei Bedarf angelegt.""" override = os.environ.get("HAG_RUNTIME_DIR") path = Path(override) if override else config.RUNTIME_DIR path.mkdir(parents=True, exist_ok=True) return path def load_last_player() -> str | None: try: data = json.loads((runtime_dir() / LAST_PLAYER_FILE).read_text(encoding="utf-8")) except (OSError, ValueError): return None if not isinstance(data, dict): return None name = str(data.get("name", "")).strip() return name or None def save_last_player(name: str) -> None: name = name.strip()[: config.MAX_PLAYER_NAME_LENGTH] if not name: return try: (runtime_dir() / LAST_PLAYER_FILE).write_text( json.dumps({"name": name}, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", ) except OSError: # Laufzeitdaten sind nice-to-have – ein Schreibfehler darf das Spiel # nicht stoppen. pass