"""PDF 图片渲染

从 PDF 发票文件中渲染为图片供多模态 LLM 使用。

对外接口:
    render_pdf_to_images(filepath, dpi) -list[str] 渲染 PDF 为图片字节
"""

import base64
from pathlib import Path

import fitz

from .. import get_logger

log = get_logger("pdf")


def render_pdf_to_images(filepath: Path, dpi: int = 300) -> list[str]:
    """将 PDF 渲染为图片，返回 base64 编码的 JPEG 字符串列表。

    Args:
        filepath: PDF 文件路径。
        dpi: 渲染分辨率（默认 150，平衡质量与速度）。

    Returns:
        base64 编码的 JPEG 图片字符串列表（每页一个）。
    """
    images = []
    try:
        doc = fitz.open(filepath)
        zoom = dpi / 72.0  # 72 DPI 是 fitz 默认
        matrix = fitz.Matrix(zoom, zoom)

        for page in doc:
            pix = page.get_pixmap(matrix=matrix)
            jpg_bytes = pix.tobytes("jpg")
            b64 = base64.b64encode(jpg_bytes).decode("utf-8")
            images.append(b64)

        doc.close()
        log.info(f"PDF 渲染成功: {filepath.name} ({len(images)} 页, {dpi} DPI)")
    except Exception as e:
        log.error(f"PDF 渲染失败 {filepath.name}: {e}")

    return images
