#!/usr/bin/env python3
"""Rehace desde D1 los capitulos en prosa de los idiomas traducidos.

Para que. Quedaban 55 divergencias repo/D1 en es, pt, hi y ru que el
sincronizador por tramos no colocaba, y con razon: no son palabras sueltas sino
secciones ENTERAS traducidas de otra manera. En `ssr/3` el repo tiene 114
palabras que D1 no y D1 160 que el repo no; empalmar fragmento a fragmento ahi
no arregla nada y arriesga dejar la frase a medias.

Como. El .md de un capitulo en prosa tiene una forma fija:

    ### N
    <blanco>
    Titulo
    <blanco>
    Cuerpo…

y D1 guarda exactamente eso en dos campos: `translation` es el titulo y
`purport` el cuerpo. Asi que el fichero se reescribe entero conservando la
cabecera `### N` que ya tuviera.

Solo prosa. Los libros por verso llevan bengali, transliteracion y glosas
repartidos en cinco campos, y reconstruir ese formato desde D1 es otra cosa: si
se pide un ref de libro por verso, se salta y lo dice.

Uso:
    python3 regenerar_prosa_desde_d1.py --lang es                 # ensayo
    python3 regenerar_prosa_desde_d1.py --lang es --aplicar
"""
import json
import pathlib
import re
import sys

HERE = pathlib.Path(__file__).resolve().parent
sys.path.insert(0, str(HERE))
from paridad_completa import raiz_de  # noqa: E402
from ver_divergencia import d1  # noqa: E402

# libros cuyo .md es «### N / titulo / cuerpo»
PROSA = {'kb', 'tlc', 'ssr', 'nod', 'pop', 'poy', 'bbd', 'ekc', 'ej',
         'owk', 'rv', 'lob', 'ttp', 'krp', 'pqpa', 'tqk', 'lcfl'}


def main():
    aplicar = '--aplicar' in sys.argv
    lang = sys.argv[sys.argv.index('--lang') + 1]
    raiz = raiz_de(lang)
    casos = json.loads((HERE / f'paridad_completa_{lang}.json').read_text(encoding='utf-8'))
    hechos = saltados = 0
    for x in casos:
        libro = x['ref'].split('/')[0]
        if libro not in PROSA:
            print(f"  {x['ref']:16} libro por verso, no se regenera aqui")
            saltados += 1
            continue
        f = raiz / x['file']
        if not f.is_file():
            saltados += 1
            continue
        fila = d1(f"SELECT COALESCE(translation,'') t, COALESCE(purport,'') p "
                  f"FROM verses WHERE ref='{x['ref']}' AND lang='{lang}'")
        if not fila or not fila[0]['p'].strip():
            print(f"  {x['ref']:16} sin cuerpo en D1, no toco")
            saltados += 1
            continue
        viejo = f.read_text(encoding='utf-8')
        m = re.match(r'(#{1,4}\s+\S+[^\n]*\n)', viejo)
        cabecera = m.group(1) if m else ''
        titulo = fila[0]['t'].strip()
        cuerpo = fila[0]['p'].strip()
        # Sin `### N` —los ficheros del frontmatter no lo llevan— no hay que
        # poner el salto de linea de separacion: dejaba el fichero empezando
        # por una linea en blanco.
        sep = '\n' if cabecera else ''
        nuevo = (f'{cabecera}{sep}{titulo}\n\n{cuerpo}\n' if titulo
                 else f'{cabecera}{sep}{cuerpo}\n')
        if nuevo == viejo:
            saltados += 1
            continue
        print(f"  {x['ref']:16} {len(viejo):7} -> {len(nuevo):7} bytes   {titulo[:40]!r}")
        if aplicar:
            f.write_text(nuevo, encoding='utf-8')
        hechos += 1
    print(f'\n  regenerados: {hechos}   saltados: {saltados}')
    if not aplicar:
        print('  (ensayo: anade --aplicar)')
    return 0


if __name__ == '__main__':
    sys.exit(main())
