"""pdf_save — guarda el documento PDF a un archivo o retorna bytes."""

import sys
import os

_types_dir = os.path.join(os.path.dirname(__file__), "..", "..", "..", "python", "types", "infra")
sys.path.insert(0, _types_dir)
from pdf_doc import PDFDoc


def pdf_save(
    doc: PDFDoc,
    output_path: str | None = None,
) -> str | bytes:
    """Guarda el documento PDF a un archivo o retorna los bytes del PDF.

    Si se especifica output_path, escribe el PDF en disco y retorna el path.
    Si output_path es None, retorna los bytes del PDF sin escribir a disco.

    Args:
        doc: PDFDoc con al menos una pagina de contenido.
        output_path: ruta del archivo PDF a crear. None retorna bytes.

    Returns:
        output_path si se especifico, o bytes del PDF si output_path es None.
    """
    if output_path is not None:
        doc.fpdf.output(output_path)
        return output_path
    else:
        return bytes(doc.fpdf.output())
