"""pdf_from_html — convierte HTML string a PDF usando weasyprint (stub si no disponible)."""


def pdf_from_html(
    html_string: str,
    output_path: str,
    page_size: str = "A4",
    css: str = "",
) -> str:
    """Convierte un HTML string a PDF usando weasyprint.

    Soporta CSS inline y externo (pasado como string). Produce PDFs de alta
    calidad tipografica con soporte completo de CSS layout (columnas, grids,
    fuentes web).

    NOTA: Requiere weasyprint y sus dependencias de sistema (pango, cairo,
    gdk-pixbuf). Instalar con: pip install weasyprint
    En Linux: apt install libpango-1.0-0 libcairo2 libgdk-pixbuf-2.0-0

    Args:
        html_string: contenido HTML completo como string.
        output_path: ruta donde guardar el PDF generado.
        page_size: tamaño de pagina CSS: 'A4', 'letter', 'A3'. Por defecto 'A4'.
        css: CSS adicional como string para aplicar sobre el HTML.

    Returns:
        output_path con el PDF guardado.

    Raises:
        RuntimeError: si weasyprint no esta instalado.
    """
    try:
        import weasyprint
    except ImportError as exc:
        raise RuntimeError(
            "weasyprint no esta instalado. "
            "Instalar con: pip install weasyprint\n"
            "Dependencias de sistema (Linux): "
            "apt install libpango-1.0-0 libcairo2 libgdk-pixbuf-2.0-0"
        ) from exc

    page_css = f"@page {{ size: {page_size}; }}"
    full_css = page_css + "\n" + css if css else page_css

    html = weasyprint.HTML(string=html_string)
    stylesheet = weasyprint.CSS(string=full_css)
    html.write_pdf(output_path, stylesheets=[stylesheet])

    return output_path
