#!/usr/bin/env python3
"""测试 PDF 多模态提取完整链路

用法:
    python scripts/test_multimodal.py
"""

import io
import sys
from pathlib import Path

# Windows 终端强制 UTF-8
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")

ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))  # noqa: E402

from src.doc.llm_extractor import extract_document  # noqa: E402
from src.doc.pdf import render_pdf_to_images  # noqa: E402


def test_render() -> None:
    """测试 PDF 渲染"""
    pdf_path = ROOT / "事前申请单.pdf"
    if not pdf_path.exists():
        print(f"跳过: {pdf_path.name} 不存在")
        return

    print("=" * 60)
    print("测试 PDF 渲染")
    print("=" * 60)
    try:
        images = render_pdf_to_images(pdf_path, dpi=150)
        if images:
            print(f"成功渲染 {len(images)} 页")
            for i, img_b64 in enumerate(images):
                print(f"  第 {i + 1} 页: base64 长度 {len(img_b64)} 字符")
        else:
            print("渲染返回空列表！")
    except ImportError as e:
        print(f"导入失败: {e}")
    except Exception as e:
        print(f"渲染异常: {e}")


def test_multimodal_extract() -> None:
    """测试完整的多模态提取链路"""
    pdf_path = ROOT / "事前申请单.pdf"
    if not pdf_path.exists():
        print(f"跳过: {pdf_path.name} 不存在")
        return

    print()
    print("=" * 60)
    print("测试多模态提取")
    print("=" * 60)
    try:
        result = extract_document(pdf_path)
        if result:
            print("提取成功:")
            import json

            print(json.dumps(result, ensure_ascii=False, indent=2))
        else:
            print("提取返回空字典！")
    except Exception as e:
        print(f"提取异常: {e}")
        import traceback

        traceback.print_exc()


def main() -> None:
    test_render()
    test_multimodal_extract()
    print()
    print("测试完成!")


if __name__ == "__main__":
    main()
