#!/usr/bin/env python3
"""Extrae la capa de texto de un PDF a .txt.

Sirve para conservar audioscripts y wordlists en el vault sin guardar el PDF,
que pesa cientos de veces mas y ademas no entra a git.

    python extraer-texto.py ENTRADA.pdf SALIDA.txt
    python extraer-texto.py CARPETA/ SALIDA_DIR/   (todos los PDF de la carpeta)
"""
import argparse
import os
import sys

import pymupdf


def extraer(pdf, destino):
    doc = pymupdf.open(pdf)
    partes = []
    for i, page in enumerate(doc, 1):
        t = page.get_text()
        if t.strip():
            partes.append(f"--- pag {i} ---\n{t}")
    chars = sum(len(p) for p in partes)
    if chars < doc.page_count * 50:
        print(f"  SIN CAPA DE TEXTO, saltado: {os.path.basename(pdf)}", file=sys.stderr)
        doc.close()
        return False
    os.makedirs(os.path.dirname(destino) or ".", exist_ok=True)
    with open(destino, "w", encoding="utf-8") as f:
        f.write("\n".join(partes))
    print(f"  {os.path.basename(pdf)} -> {os.path.basename(destino)} "
          f"({doc.page_count} pag, {chars} chars)")
    doc.close()
    return True


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("entrada")
    ap.add_argument("salida")
    args = ap.parse_args()

    if os.path.isdir(args.entrada):
        pdfs = sorted(f for f in os.listdir(args.entrada) if f.lower().endswith(".pdf"))
        n = 0
        for fn in pdfs:
            destino = os.path.join(args.salida, os.path.splitext(fn)[0] + ".txt")
            n += extraer(os.path.join(args.entrada, fn), destino)
        print(f"\n{n} de {len(pdfs)} PDFs con texto")
    else:
        extraer(args.entrada, args.salida)


if __name__ == "__main__":
    main()
