"""Limpieza de texto antes de sintetizar (evita lectura literal de markdown)."""

from __future__ import annotations

import re

# Caracteres que el TTS suele leer en voz alta ("asterisco", "numeral", etc.).
# No incluir puntuación prosódica: . , ; : ? ! … — ni % (por ciento).
TTS_STRIP_CHARS: frozenset[str] = frozenset(
    {
        "*",  # markdown bold/italic; "asterisco"
        "_",  # markdown; "guion bajo"
        "#",  # títulos markdown; "numeral"
        "`",  # code fences / inline code
        "~",  # strikethrough
        "|",  # tablas
        "<",  # HTML / markdown
        ">",  # blockquotes / HTML
        "[",  # enlaces markdown
        "]",
        "{",
        "}",
        "\\",  # escapes
        "^",
        "•",  # viñetas
        "·",
        "●",
        "○",
        "▪",
        "▫",
        "→",
        "←",
        "↔",
        "⇒",
        "※",
        "★",
        "☆",
        "✓",
        "✔",
        "✗",
        "✘",
        "©",
        "®",
        "™",
    }
)

_STRIP_TABLE = str.maketrans({c: " " for c in TTS_STRIP_CHARS})
_WS_RE = re.compile(r"\s+")


def sanitize_for_tts(text: str) -> str:
    """Quita caracteres de formato y colapsa espacios para voz telefónica."""
    raw = (text or "").translate(_STRIP_TABLE)
    return _WS_RE.sub(" ", raw).strip()
