import fitz  # PyMuPDF
import qrcode
import os
import argparse
from urllib.parse import quote

def generate_qr_to_pdf(input_pdf, position, custom_coords, qr_size=100, margin=20):
    # 第一性原理：直连你的独立 HTTPS 节点
    base_url = "https://mt.yoyopopo.xyz/"
    file_url = f"{base_url}{quote(input_pdf)}"
    output_pdf = f"qr_{input_pdf}"

    print(f"[*] 目标写入直链: {file_url}")

    # 1. 生成纯净二维码
    qr = qrcode.QRCode(border=1)
    qr.add_data(file_url)
    qr.make(fit=True)
    img = qr.make_image(fill_color="black", back_color="white")
    temp_img = "temp_qr.png"
    img.save(temp_img)

    # 2. 计算坐标并进行物理遮盖与插入
    try:
        doc = fitz.open(input_pdf)
        page = doc[0]
        
        page_width = page.rect.width
        page_height = page.rect.height

        if custom_coords:
            x0, y0 = custom_coords[0], custom_coords[1]
            rect = fitz.Rect(x0, y0, x0 + qr_size, y0 + qr_size)
        else:
            if position == 'top-right':
                rect = fitz.Rect(page_width - qr_size - margin, margin, page_width - margin, margin + qr_size)
            elif position == 'top-left':
                rect = fitz.Rect(margin, margin, margin + qr_size, margin + qr_size)
            elif position == 'bottom-right':
                rect = fitz.Rect(page_width - qr_size - margin, page_height - qr_size - margin, page_width - margin, page_height - margin)
            elif position == 'bottom-left':
                rect = fitz.Rect(margin, page_height - qr_size - margin, margin + qr_size, page_height - margin)
            else:
                raise ValueError("未知的预设位置")

        # 物理遮盖底层旧码
        page.draw_rect(rect, color=(1, 1, 1), fill=(1, 1, 1))
        page.insert_image(rect, filename=temp_img)
        
        doc.save(output_pdf)
        doc.close()
        print(f"[+] 覆盖注入成功！文件已保存为: {output_pdf}")

    except Exception as e:
        print(f"[-] 发生错误: {e}")
    finally:
        if os.path.exists(temp_img):
            os.remove(temp_img)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="PDF 二维码精准覆盖 CLI 工具")
    parser.add_argument("file", help="输入 PDF 文件名 (如: test.pdf)")
    parser.add_argument("-p", "--pos", choices=['top-left', 'top-right', 'bottom-left', 'bottom-right'], default='top-right', help="预设位置 (默认: top-right)")
    parser.add_argument("-c", "--coords", type=float, nargs=2, metavar=('X', 'Y'), help="自定义 X Y 坐标 (如: -c 150 300)")
    parser.add_argument("-s", "--size", type=float, default=100, help="二维码边长尺寸 (默认: 100)")
    
    args = parser.parse_args()
    generate_qr_to_pdf(args.file, args.pos, args.coords, args.size)
