"""pdf_merge — fusiona multiples archivos PDF en uno solo usando pypdf."""

import os


def pdf_merge(
    pdf_paths: list[str],
    output_path: str,
) -> str:
    """Fusiona una lista de archivos PDF en un unico PDF.

    Une los PDFs en el orden de la lista. Requiere pypdf instalado.

    Args:
        pdf_paths: lista de rutas a los archivos PDF a fusionar (en orden).
        output_path: ruta del archivo PDF combinado a generar.

    Returns:
        output_path con el PDF fusionado guardado.

    Raises:
        FileNotFoundError: si alguno de los archivos no existe.
        RuntimeError: si pypdf no esta instalado.
        ValueError: si pdf_paths esta vacio.
    """
    if not pdf_paths:
        raise ValueError("pdf_paths no puede estar vacio")

    for path in pdf_paths:
        if not os.path.exists(path):
            raise FileNotFoundError(f"PDF no encontrado: {path}")

    try:
        from pypdf import PdfWriter, PdfReader
    except ImportError as exc:
        raise RuntimeError(
            "pypdf no esta instalado. Instalar con: pip install pypdf"
        ) from exc

    writer = PdfWriter()

    for path in pdf_paths:
        reader = PdfReader(path)
        for page in reader.pages:
            writer.add_page(page)

    with open(output_path, "wb") as f:
        writer.write(f)

    return output_path
