"""
Consola — convenções FastChecker II (padronização 6.1).

- Prefixo único em ASCII: ``[FastChecker][<componente>]`` para mensagens de diagnóstico.
- Evitar emoji em mensagens críticas na consola Windows (cp1252); preferir texto.
- Arranque: ``main`` / ``app_shell`` chamam ``core.console_stdio.configure_stdio_safe()`` para
  reduzir ``UnicodeEncodeError`` em ``stdout``/``stderr``.
- Ficheiros JSON/log: usar sempre ``encoding=\"utf-8\"`` em ``open(...)``.
"""

from __future__ import annotations

import sys
from typing import TextIO


def _line(scope: str, message: str) -> str:
    comp = (scope or "app").strip() or "app"
    return f"[FastChecker][{comp}] {message}"


def fc_log(scope: str, message: str, *, file: TextIO | None = None, flush: bool = True) -> None:
    """Imprime uma linha com prefixo consistente (ASCII)."""
    out = file if file is not None else sys.stdout
    print(_line(scope, message), file=out, flush=flush)


def fc_log_exc(scope: str, message: str, exc: BaseException) -> None:
    """Mensagem + tipo e texto da exceção (sem traceback completo)."""
    fc_log(scope, f"{message}: {type(exc).__name__}: {exc}")