#!/usr/bin/env python3
"""Aplica las divergencias del rediff de Surya adjudicadas por imagen.

De donde salen. Los candidatos del diff estaban generados contra el repo de
principios de agosto; al rehacerlos contra el repo de hoy quedaron 79 abiertos,
y estos son los que se adjudicaron mirando la pagina del escaneo. Cada uno lleva
la pagina impresa en `nota`, para que se pueda volver a comprobar.

Todos van en el mismo sentido: el impreso dice una cosa y el repo otra, asi que
gana el impreso. Los dos primeros son la excepcion que la regla admite —el repo
se contradice a si mismo dentro de la misma frase— y ahi tambien gana el impreso
porque coincide con el resto del parrafo.

Uso:
    python3 aplicar_diff_2026-08-13.py            # ensayo
    python3 aplicar_diff_2026-08-13.py --aplicar
"""
import json
import pathlib
import sys

REPO = pathlib.Path('/Users/jaganat/git_projects/vedabase-original')
LOG = REPO / 'corrections.jsonl'

# (fichero, viejo, nuevo, nota)
CAMBIOS = [
    ('sri-caitanya-caritamrta/adi-lila/chapter-02/cc-adi-2.30.md',
     'cowsrom', 'cows from',
     'errata del repo: «their cowsrom the pasturing grounds». Impreso adi1 p.140'),
    ('srimad-bhagavatam/canto-03/chapter-26/sb-3.26.49.md',
     'there isund and touch', 'there is sound and touch',
     'errata del repo. El mismo parrafo escribe «is sound» bien la tercera vez. '
     'Impreso SB3.4 p.132'),
    ('srimad-bhagavatam/canto-03/chapter-26/sb-3.26.49.md',
     'there isund, touch and for', 'there is sound, touch and for',
     'segunda ocurrencia de la misma errata. Impreso SB3.4 p.132'),
    ('sri-caitanya-caritamrta/adi-lila/chapter-01/cc-adi-1.46.md',
     'all the revealed literatures accept', 'all the revealed scriptures accept',
     'impreso adi1 p.71 (pagina impresa 45): «all the revealed scriptures accept»'),
    ('sri-caitanya-caritamrta/adi-lila/chapter-07/cc-adi-7.108.md',
     'understand the vedic literatures in any way', 'understand the Vedic scriptures in any way',
     'impreso adi2 p.115 (pagina impresa 91): «understand the Vedic scriptures»'),
    ('sri-caitanya-caritamrta/adi-lila/chapter-07/cc-adi-7.119.md',
     'wants to enjoy nice foodstuffs', 'wants to enjoy nice food',
     'impreso adi2 p.135 (pagina impresa 111). La misma frase dice antes '
     '«varieties of foodstuffs»: el impreso usa las dos palabras'),
    ('sri-caitanya-caritamrta/adi-lila/chapter-10/cc-adi-10.38.md',
     'seriously begged foodstuffs from him', 'seriously begged food from him',
     'impreso adi2 p.296 (pagina impresa 272)'),
    ('sri-caitanya-caritamrta/adi-lila/chapter-10/cc-adi-10.60.md',
     'arrange for his foodstuffs', 'arrange for His food',
     'impreso adi2 p.312 (pagina impresa 288). La misma pagina dice despues '
     '«remnants of His foodstuffs»'),
    ('sri-caitanya-caritamrta/adi-lila/chapter-02/cc-adi-2.103.md',
     '*cit-śakti* nor *antaraṅga-śakti,*', '*cit-śakti* or *antaraṅga-śakti,*',
     'impreso adi1 p.178 (pagina impresa 153)'),
    ('sri-caitanya-caritamrta/madhya-lila/chapter-08/cc-madhya-8.36.md',
     'vaiśya* or lower than *śūdra.*', 'vaiśya* or one lower than a *śūdra.*',
     'impreso mad3 p.131 (pagina impresa 98)'),
]


def main():
    aplicar = '--aplicar' in sys.argv
    hechos, fallos = [], []
    for rel, viejo, nuevo, nota in CAMBIOS:
        f = REPO / rel
        if not f.exists():
            fallos.append((rel, 'no existe')); continue
        t = f.read_text(encoding='utf-8')
        # busca respetando mayusculas y, si no, sin distinguirlas
        real = viejo if viejo in t else None
        if real is None:
            baja = t.lower(); i = baja.find(viejo.lower())
            real = t[i:i + len(viejo)] if i >= 0 else None
        if real is None:
            fallos.append((rel, f'no encuentro {viejo!r}')); continue
        n = t.count(real)
        if n != 1:
            fallos.append((rel, f'{viejo!r} aparece {n} veces, no toco')); continue
        print(f'  {rel}\n     {real!r} -> {nuevo!r}')
        if aplicar:
            f.write_text(t.replace(real, nuevo, 1), encoding='utf-8')
            with LOG.open('a', encoding='utf-8') as fh:
                fh.write(json.dumps({'ref': None, 'field': 'purport/translation',
                                     'file': rel, 'replace': {'en': [real, nuevo]},
                                     'note': nota}, ensure_ascii=False) + '\n')
        hechos.append((rel, real, nuevo))
    print(f'\n  aplicables: {len(hechos)}   con problema: {len(fallos)}')
    for r, m in fallos:
        print(f'   ! {r}: {m}')
    if not aplicar:
        print('  (ensayo: anade --aplicar)')
    return 0


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