import os

from document.pdf_renderer import pdf_to_images
from document.layout_detector import detect_layout
from document.ocr_engine import ocr_blocks
from document.translator_engine import translate_blocks
from document.pdf_rebuilder import rebuild_pdf

from core.logger import log
from core.events import events


def process_document(pdf_path, temp_dir, output_dir):

    name = os.path.splitext(os.path.basename(pdf_path))[0]

    log(f"[DOC ENGINE] Procesando {name}")

    # ---------------- 1. PDF → IMÁGENES ----------------
    events.emit({"progress": 10, "msg": "Renderizando PDF..."})

    images = pdf_to_images(pdf_path, temp_dir)

    # ---------------- 2. LAYOUT ----------------
    events.emit({"progress": 25, "msg": "Detectando estructura..."})

    blocks = detect_layout(images)

    # ---------------- 3. OCR ----------------
    events.emit({"progress": 45, "msg": "Extrayendo texto..."})

    text_blocks = ocr_blocks(blocks)

    if not text_blocks:
        log("[ERROR] No se detectó texto en OCR")
        return None

    # ORDEN IMPORTANTE (evita PDFs desordenados)
    text_blocks.sort(key=lambda x: (x.get("page", 0), x["bbox"][1]))

    # ---------------- 4. TRADUCCIÓN ----------------
    events.emit({"progress": 70, "msg": "Traduciendo..."})

    translated = translate_blocks(text_blocks)

    # ---------------- 5. RECONSTRUCCIÓN ----------------
    events.emit({"progress": 90, "msg": "Reconstruyendo PDF..."})

    output_file = os.path.join(output_dir, f"{name}_PRO.pdf")

    rebuild_pdf(translated, output_file, pdf_path)

    events.emit({"progress": 100, "msg": "COMPLETADO ✔"})

    log("[DOC ENGINE] FINALIZADO")

    return output_file