#!/usr/bin/env python3
"""Saca a PNG la pagina del escaneo de un candidato, para adjudicar por imagen.

El OCR de Surya es bueno pero no es prueba: la regla del proyecto es que nada se
cambia sin ver la pagina. Esto resuelve `<escaneo>#pNNNN` contra books.json y
renderiza esa pagina con pdftoppm.

Uso:
    python3 pagina_png.py adi2 296 /tmp/x.png [--ppp 200]
    python3 pagina_png.py --candidato 21 /tmp/x.png
"""
import json
import pathlib
import subprocess
import sys

HERE = pathlib.Path(__file__).resolve().parent
SCAN = pathlib.Path('/Users/jaganat/git_projects/scan_vedabase')
BOOKS = json.loads((HERE / 'books.json').read_text(encoding='utf-8'))


def pdf_de(stem):
    """Del `stem` de la pagina al PDF. Los nombres de books.json llevan carpeta
    (`originals/…`, `improved/…`) y el stem es solo el nombre del fichero."""
    for rutas in BOOKS.get('books', {}).values():
        for r in rutas:
            if pathlib.Path(r).stem == stem:
                return SCAN / r
    hit = sorted(SCAN.rglob(f'{stem}.pdf'))
    return hit[0] if hit else None


def render(stem, pagina, salida, ppp=200):
    pdf = pdf_de(stem)
    if not pdf or not pdf.exists():
        print(f'  no encuentro el PDF de {stem!r}')
        return 1
    salida = pathlib.Path(salida)
    subprocess.run(['pdftoppm', '-png', '-r', str(ppp), '-f', str(pagina), '-l', str(pagina),
                    str(pdf), str(salida.with_suffix(''))], check=True)
    # pdftoppm anade el numero de pagina al nombre
    hecho = sorted(salida.parent.glob(salida.stem + '-*.png'))
    if hecho:
        hecho[0].rename(salida)
    print(f'  {pdf.name} p.{pagina} -> {salida}')
    return 0


def main():
    if '--candidato' in sys.argv:
        i = int(sys.argv[sys.argv.index('--candidato') + 1])
        salida = sys.argv[sys.argv.index('--candidato') + 2]
        ab = json.load(open(HERE / 'abiertos_2026-08-13.json', encoding='utf-8'))
        stem, _, pag = ab[i]['page'].partition('#')
        return render(stem, int(pag.lstrip('p')), salida)
    stem, pagina, salida = sys.argv[1], int(sys.argv[2]), sys.argv[3]
    ppp = int(sys.argv[sys.argv.index('--ppp') + 1]) if '--ppp' in sys.argv else 200
    return render(stem, pagina, salida, ppp)


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