#!/usr/bin/env python3
"""Reescribe siglas y tecnicismos a como se pronuncian, usando
pronunciacion.json. Lo usa jarvis-voz.sh antes de mandar texto a Piper (y sirve
para regenerar la cache con XTTS). Sustituye solo palabras completas.

    python3 pronuncia.py "conéctate por SSH a la VPN"
    -> conéctate por ese ese hache a la uve pe ene
"""
import sys, os, json, re

BASE = os.path.dirname(os.path.abspath(__file__))
DIC = os.path.join(BASE, "pronunciacion.json")


def reescribe(texto, dic):
    # claves mas largas primero: evita que VLAN caiga en LAN, HTTPS en HTTP...
    for k in sorted(dic, key=len, reverse=True):
        # (?<!\w)..(?!\w) = limites de palabra unicode; IGNORECASE por si el
        # texto trae la sigla en minuscula
        texto = re.sub(rf"(?<!\w){re.escape(k)}(?!\w)", dic[k], texto,
                       flags=re.IGNORECASE)
    return texto


def main():
    texto = " ".join(sys.argv[1:])
    try:
        with open(DIC, encoding="utf-8") as f:
            dic = json.load(f)
    except Exception:
        dic = {}
    sys.stdout.write(reescribe(texto, dic))


if __name__ == "__main__":
    main()
