import re

from app.plan_d_action.utils.interface import CORRESPONDANCE_COULEURS


def remplacer_par_badge(
    markdown_text: str,
    correspondance: dict[str, str] | None = CORRESPONDANCE_COULEURS
) -> str:
    """Remplace certains mots par des badges colorés dans un texte Markdown.

    Args:
        markdown_text (str): Le texte Markdown à modifier.
        correspondance (dict, optional): Dictionnaire qui mappe les mots
            à remplacer vers les couleurs de leurs badges. Si None, utilise
            CORRESPONDANCE_COULEURS par défaut.

    Returns:
        str: Le texte Markdown modifié avec des badges ajoutés.
    """
    # Échappe les mots à remplacer s'ils contiennent des accents ou espaces
    for mot, couleur in correspondance.items():
        # Utilise des bords de mots (\b) pour éviter les remplacements partiels
        pattern = r'\b' + re.escape(mot) + r'\b'
        remplacement = f":{couleur}-badge[{mot}]"
        markdown_text = re.sub(pattern, remplacement, markdown_text)
    return markdown_text
