from __future__ import annotations import sys class _Colors: RESET = "\033[0m" BOLD = "\033[1m" RED = "\033[31m" GREEN = "\033[32m" YELLOW = "\033[33m" BLUE = "\033[34m" def _print(message: str, *, prefix: str = "", color: str | None = None, stream=None) -> None: if stream is None: stream = sys.stdout text = f"{prefix} {message}" if prefix else message if color: text = f"{color}{text}{_Colors.RESET}" print(text, file=stream) def info(message: str) -> None: _print(message, prefix="ℹ️", color=_Colors.BLUE) def success(message: str) -> None: _print(message, prefix="✅", color=_Colors.GREEN) def warning(message: str) -> None: _print(message, prefix="⚠️", color=_Colors.YELLOW, stream=sys.stderr) def error(message: str) -> None: _print(message, prefix="❌", color=_Colors.RED, stream=sys.stderr) def heading(message: str) -> None: _print(message, prefix="▶", color=_Colors.BOLD) def plain(message: str) -> None: _print(message) class Notifier: """Abstractielaag voor toekomstige auditieve output. Voor nu enkel console-notificaties; later kan dit uitgebreid worden met TTS, systeemmeldingen, ... """ @staticmethod def notify_event(event: str, detail: str | None = None) -> None: # pragma: no cover - placeholder if detail: info(f"[{event}] {detail}") else: info(f"[{event}]")