#!/bin/bash
# 用法: run_chunk.sh <块目录绝对路径>  —— 前提：WPS「输出为PDF」多文件窗口开着且列表为空
C="$1"; D=/private/tmp/claude-501/-Users-luyan/bd181c5c-f1b3-408e-b01f-b6a489cc2577/scratchpad
N=$(ls "$C" | grep -Ec '\.(doc|docx)$')
fr(){ osascript -e 'tell application "System Events" to tell process "wpsoffice" to set frontmost to true'; }
key(){ osascript -e "tell application \"System Events\" to keystroke \"$1\" using command down"; }
wins(){ osascript -e 'tell application "System Events" to tell process "wpsoffice" to get name of every window' 2>/dev/null; }
pdfs(){ ls "$C"/*.pdf 2>/dev/null | wc -l | tr -d ' '; }
log(){ echo "[$(date +%H:%M:%S)] $(basename "$C") $*"; }
log "源 $N 份, 已有 pdf $(pdfs)"
fr; sleep 0.5
$D/click 688 506 >/dev/null; sleep 3                              # 添加文件（空列表居中按钮）
[[ "$(wins)" == *打开* ]] || { log "✗ 文件对话框没出来"; screencapture -x "$D/stuck_$(basename "$C")_a.png"; exit 2; }
printf '%s' "$C" | pbcopy
$D/click 1020 66 >/dev/null; sleep 0.7; key a; key v; sleep 0.3
osascript -e 'tell application "System Events" to key code 36'; sleep 3     # 地址栏回车
$D/click 621 134 >/dev/null; sleep 0.6; key a; sleep 1.5                     # 选中全部
$D/click 1272 651 >/dev/null                                                  # 打开
for i in $(seq 1 60); do [[ "$(wins)" == *提示* ]] && break; sleep 1; done  # 等「已添加到队列」提示
log "队列提示出现(等了 ${i}s)"; sleep 0.5; $D/click 983 477 >/dev/null       # 是
sleep $(( N / 8 + 8 ))                                                        # 等列表把页数都数完
$D/click 1167 694 >/dev/null; log "已点开始输出，等待 $N 份"
for i in $(seq 1 1200); do n=$(pdfs); [ "$n" -ge "$N" ] && break
  if [ $((i % 15)) -eq 0 ] && [ "$n" -eq 0 ]; then log "尚无产出，再点一次开始输出"; fr; $D/click 1167 694 >/dev/null; fi
  if [ $i -eq 90 ] && [ "$n" -eq 0 ]; then log "✗ 270 秒仍无产出"; screencapture -x "$D/stuck_$(basename "$C")_b.png"; exit 2; fi
  sleep 3; done
sleep 4; log "pdf=$(pdfs)/$N"
fr; $D/click 834 163 >/dev/null; sleep 1.5; $D/click 983 477 >/dev/null; sleep 2     # 清空列表 + 确定
[[ "$(wins)" == *提示* ]] && { $D/click 983 477 >/dev/null; sleep 1.5; }
log "列表已清空"
