#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""真渲染截图（1500px 宽）+ 打印导出（每页一页）验收。"""
import io
import os
import re
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')
os.makedirs(OUT, exist_ok=True)
PORT = 8792
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 = []


def shot(pg, idx, name, wait=700):
    pg.evaluate("window.__go(%d)" % idx)
    pg.wait_for_timeout(wait)
    f = os.path.join(OUT, name)
    pg.screenshot(path=f)
    kb = os.path.getsize(f) // 1024
    shots.append((name, kb))
    print('  %-44s %6dx900  %4dKB' % (name, 1500, kb))


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)
    pg.goto(URL)
    pg.wait_for_load_state('load')
    pg.wait_for_timeout(900)

    shot(pg, 0,  '01_封面.png')
    shot(pg, 1,  '02_目录.png')
    shot(pg, 5,  '03_章节幕封_第1章.png')
    shot(pg, 14, '04_内容页_需求类型+SVG.png')
    shot(pg, 17, '05_内容页_上桌三条件+SVG.png')
    shot(pg, 4,  '06_内容页_一句话本质_大字报.png')
    shot(pg, 21, '07_内容页_开价策略+SVG.png')
    shot(pg, 29, '08_内容页_五要素模型+SVG.png')

    # 演讲者视图
    pg.evaluate("window.__go(17)")
    pg.wait_for_timeout(500)
    pg.keyboard.press('s')
    pg.wait_for_timeout(900)
    pg.screenshot(path=os.path.join(OUT, '09_演讲者视图.png'))
    shots.append(('09_演讲者视图.png', os.path.getsize(os.path.join(OUT, '09_演讲者视图.png')) // 1024))
    print('  %-44s %6dx900  %4dKB' % ('09_演讲者视图.png', 1500, shots[-1][1]))
    pg.keyboard.press('s'); pg.wait_for_timeout(300)

    # 沙盒（走完两轮）
    pg.evaluate("window.__go(30)"); pg.wait_for_timeout(500)
    pg.evaluate("document.querySelectorAll('#sb-stage .opt')[1].click()")
    pg.wait_for_timeout(300)
    pg.evaluate("document.querySelectorAll('#sb-stage .opt')[1].click()")
    pg.wait_for_timeout(500)
    pg.screenshot(path=os.path.join(OUT, '10_沙盒_逐轮反馈.png'))
    shots.append(('10_沙盒_逐轮反馈.png', os.path.getsize(os.path.join(OUT, '10_沙盒_逐轮反馈.png')) // 1024))
    print('  %-44s %6dx900  %4dKB' % ('10_沙盒_逐轮反馈.png', 1500, shots[-1][1]))
    # 走完给小结
    pg.evaluate("document.querySelectorAll('#sb-stage .opt')[1].click()")
    pg.wait_for_timeout(600)
    pg.screenshot(path=os.path.join(OUT, '11_沙盒_场景小结.png'))
    shots.append(('11_沙盒_场景小结.png', os.path.getsize(os.path.join(OUT, '11_沙盒_场景小结.png')) // 1024))
    print('  %-44s %6dx900  %4dKB' % ('11_沙盒_场景小结.png', 1500, shots[-1][1]))

    # 速查卡（筛选态）
    pg.evaluate("window.__go(31)"); pg.wait_for_timeout(400)
    pg.fill('#qk-search', '异议'); pg.wait_for_timeout(300)
    pg.screenshot(path=os.path.join(OUT, '12_速查卡_搜索筛选.png'))
    shots.append(('12_速查卡_搜索筛选.png', os.path.getsize(os.path.join(OUT, '12_速查卡_搜索筛选.png')) // 1024))
    print('  %-44s %6dx900  %4dKB' % ('12_速查卡_搜索筛选.png', 1500, shots[-1][1]))

    shot(pg, 32, '13_自检清单.png')
    shot(pg, 33, '14_自问自答.png')
    shot(pg, 34, '15_收尾.png')

    # 打印导出
    pdf = os.path.join(OUT, '价格谈判培训_攻心为上_deck.pdf')
    pg.pdf(path=pdf, prefer_css_page_size=True, print_background=True)
    raw = io.open(pdf, 'rb').read()
    n_page = len(re.findall(rb'/Type\s*/Page[^s]', raw))
    print('\n  打印导出 %s  %.1fKB  页数=%d' % (os.path.basename(pdf),
                                            len(raw) / 1024.0, n_page))
    n_slides = pg.evaluate("document.querySelectorAll('#track > .slide').length")
    print('  %s 打印页数 = slide 数（%d / %d）' % ('✅' if n_page == n_slides else '❌',
                                                n_page, n_slides))
    br.close()

    # 手机 414px
    br2 = p.chromium.launch(channel='chrome', headless=True)
    m = br2.new_page(viewport={'width': 414, 'height': 820})
    m.goto(URL); m.wait_for_timeout(900)
    m.evaluate("window.__go(30)"); m.wait_for_timeout(500)
    m.screenshot(path=os.path.join(OUT, '16_手机414_沙盒.png'))
    print('  16_手机414_沙盒.png                       414x820')
    m.evaluate("window.__go(0)"); m.wait_for_timeout(400)
    m.screenshot(path=os.path.join(OUT, '17_手机414_封面.png'))
    print('  17_手机414_封面.png                       414x820')
    br2.close()

srv.terminate()
print('\n截图 %d 张 → %s' % (len(shots) + 3, OUT))
