# -*- coding: utf-8 -*-
"""PDF에서 도표 영역을 PNG로 추출 (PyMuPDF).
사용: python extract_fig.py <pdf> <page(1기준)> <out.png> [x0,y0,x1,y1] [dpi]
- clip 미지정 시 전체 페이지 렌더(에이전트가 좌표 파악용으로 먼저 사용)
- clip은 PDF 포인트 좌표(72dpi 기준). dpi 기본 220.
좌표 파악 보조: python extract_fig.py <pdf> <page> --blocks  → 텍스트/이미지 블록 bbox 목록 출력
"""
import io
import sys

import fitz

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")


def main():
    pdf, page_no = sys.argv[1], int(sys.argv[2])
    doc = fitz.open(pdf)
    page = doc[page_no - 1]
    if len(sys.argv) > 3 and sys.argv[3] == "--blocks":
        print("페이지 크기(pt):", page.rect)
        for b in page.get_text("blocks"):
            print("TEXT %.0f,%.0f,%.0f,%.0f | %s" % (b[0], b[1], b[2], b[3], b[4][:50].replace("\n", " ")))
        for img in page.get_images(full=True):
            try:
                r = page.get_image_rects(img[0])
                for rr in r:
                    print("IMG  %.0f,%.0f,%.0f,%.0f | xref=%d" % (rr.x0, rr.y0, rr.x1, rr.y1, img[0]))
            except Exception:
                pass
        for d in page.get_drawings():
            r = d["rect"]
            if r.width > 100 and r.height > 60:
                print("DRAW %.0f,%.0f,%.0f,%.0f" % (r.x0, r.y0, r.x1, r.y1))
        return
    out = sys.argv[3]
    clip = None
    dpi = 220
    if len(sys.argv) > 4 and sys.argv[4] != "-":
        x0, y0, x1, y1 = [float(v) for v in sys.argv[4].split(",")]
        clip = fitz.Rect(x0, y0, x1, y1)
    if len(sys.argv) > 5:
        dpi = int(sys.argv[5])
    pm = page.get_pixmap(matrix=fitz.Matrix(dpi / 72, dpi / 72), clip=clip)
    pm.save(out)
    print("OK %s (%dx%d px)" % (out, pm.width, pm.height))


if __name__ == "__main__":
    main()
