#!/usr/bin/env python3
"""Solo modo por bloques (layout → OCR por bloque) en páginas bengalí-densas.
¿Evita el bucle de repetición y saca el inglés/IAST rápido?"""
import os, re, subprocess, tempfile, time, json
from pathlib import Path
os.environ.setdefault("RECOGNITION_BATCH_SIZE", "64")
os.environ.setdefault("DETECTOR_BATCH_SIZE", "8")
HERE = Path(__file__).resolve().parent
CFG = json.loads((HERE / "books.json").read_text())
PDF = Path(CFG["_scan_root"]) / "originals" / "mad1.pdf"
from PIL import Image
from surya.recognition import RecognitionPredictor
from surya.layout import LayoutPredictor
REC = RecognitionPredictor(); LAY = LayoutPredictor()

def render(pg, dpi=300):
    with tempfile.TemporaryDirectory() as td:
        pre = str(Path(td) / "r")
        subprocess.run(["pdftoppm","-f",str(pg),"-l",str(pg),"-r",str(dpi),"-png",str(PDF),pre],
                       capture_output=True, timeout=120)
        imgs = sorted(Path(td).glob("r*.png"))
        return Image.open(imgs[0]).convert("RGB") if imgs else None

def page_text(page):
    out=[]
    for blk in page.blocks:
        if getattr(blk,'skipped',False) or getattr(blk,'error',False): continue
        txt=re.sub(r'<[^>]+>',' ',blk.html or '').strip()
        if txt: out.append(txt)
    return "\n".join(out)

for pg in (226, 230, 250, 300):
    img = render(pg)
    if img is None: print(f"pg{pg}: no render"); continue
    t0=time.time()
    try:
        layout = LAY([img]); tl=time.time()-t0
        res = REC([img], layout_results=layout, full_page=False)
        dt=time.time()-t0; txt=page_text(res[0])
        print(f"\n===== PÁGINA {pg}: BLOCK {dt:5.1f}s (layout {tl:.1f}s)  {len(txt)} chars, {len(layout[0].bboxes)} bloques", flush=True)
        print("labels:", [b.label for b in layout[0].bboxes])
        print("TEXTO:\n"+txt[:600], flush=True)
    except Exception as e:
        print(f"\npg{pg}: BLOCK ERROR {time.time()-t0:.1f}s: {e}", flush=True)
print("\n=== FIN ===")
