#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""插图页真渲染截图（1500px 宽）→ _shots_price_deck_img/"""
import os
import subprocess
import sys
import time
import urllib.parse
from playwright.sync_api import sync_playwright

W = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
DECK = os.path.join(W, '培训与上手', '培训', '价格谈判培训_攻心为上_deck.html')
OUT = os.path.join(W, '培训与上手', '培训', '_shots_price_deck_img')
os.makedirs(OUT, exist_ok=True)
PORT = 8796
URL = 'http://127.0.0.1:%d/%s' % (PORT, urllib.parse.quote(os.path.basename(DECK)))

srv = subprocess.Popen([sys.executable, '-m', 'http.server', str(PORT),
                        '--directory', os.path.join(W, '培训与上手', '培训')],
                       stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
time.sleep(1.5)

SHOTS = [
    (0,  '01_装饰_封面.png'),
    (8,  '02_乔布斯案例页_更快的马到汽车.png'),
    (9,  '03_场景_左右权衡.png'),
    (12, '04_场景_谈判桌上的博弈.png'),
    (17, '05_场景_合作达成.png'),
    (21, '06_场景_价格与取舍.png'),
    (11, '07_装饰_第2章幕封.png'),
    (30, '08_交互_沙盒回归.png'),
]

with sync_playwright() as p:
    br = p.chromium.launch(channel='chrome', headless=True)
    pg = br.new_page(viewport={'width': 1500, 'height': 900}, device_scale_factor=1)
    errs = []
    pg.on('pageerror', lambda e: errs.append(str(e)))
    pg.on('console', lambda m: errs.append('console.%s: %s' % (m.type, m.text))
          if m.type == 'error' else None)
    pg.goto(URL)
    pg.wait_for_load_state('load')
    pg.wait_for_timeout(1000)
    for idx, name in SHOTS:
        pg.evaluate("window.__go(%d)" % idx)
        pg.wait_for_timeout(650)
        f = os.path.join(OUT, name)
        pg.screenshot(path=f)
        print('  %-46s %6d x 900  %5dKB   (slide %d)' % (name, 1500,
                                                          os.path.getsize(f) // 1024, idx + 1))
    # 打印导出
    pdf = os.path.join(OUT, '价格谈判培训_攻心为上_deck_插图版.pdf')
    pg.pdf(path=pdf, prefer_css_page_size=True, print_background=True)
    raw = open(pdf, 'rb').read()
    import re
    n = len(re.findall(rb'/Type\s*/Page[^s]', raw))
    print('\n  打印导出 %d 页  %.1fKB' % (n, len(raw) / 1024.0))
    print('  JS 控制台错误：%s' % (errs or '无'))
    br.close()
srv.terminate()
print('截图 →', OUT)
