"""pdf_add_page — añade una pagina al documento PDF."""

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_add_page(
    doc: PDFDoc,
    orientation: str = "portrait",
    width: float | None = None,
    height: float | None = None,
) -> PDFDoc:
    """Añade una pagina nueva al documento PDF.

    Usa orientacion y dimensiones especificadas, o hereda las del documento.
    Si se especifica width/height se usa formato personalizado;
    si no, se usa A4 con la orientacion indicada.

    Args:
        doc: PDFDoc retornado por pdf_create.
        orientation: orientacion de la pagina: 'portrait' o 'landscape'.
        width: ancho personalizado en mm. Si None, usa A4 (210 mm).
        height: alto personalizado en mm. Si None, usa A4 (297 mm).

    Returns:
        PDFDoc con la nueva pagina añadida (mismo objeto modificado).
    """
    fpdf = doc.fpdf

    orient_char = "P" if orientation == "portrait" else "L"

    if width is not None and height is not None:
        fpdf.add_page(orientation=orient_char, format=(width, height))
    else:
        fpdf.add_page(orientation=orient_char, format="A4")

    actual_w = fpdf.w
    actual_h = fpdf.h
    doc.pages.append({
        "orientation": orientation,
        "width": actual_w,
        "height": actual_h,
    })

    return doc
