/**
 * 修补 miniprogram-automator 的 spawn 调用
 * 问题：在 Windows 上 spawn .bat 文件需要 shell: true
 * miniprogram-automator v0.12.1 的 Launcher.js 中 spawn 缺少此选项
 * 
 * 用法：在 weixin-devtools-mcp 启动前运行此补丁
 * node scripts/ops/patch_automator_spawn.js
 */
const fs = require('fs');
const path = require('path');

// npx 缓存目录
const npxCacheBase = path.join(process.env.LOCALAPPDATA, 'npm-cache', '_npx');

// 遍历 npx 缓存找到 miniprogram-automator
const dirs = fs.readdirSync(npxCacheBase);
let patched = 0;

for (const dir of dirs) {
  const launcherPath = path.join(npxCacheBase, dir, 'node_modules', 'miniprogram-automator', 'out', 'Launcher.js');
  
  if (!fs.existsSync(launcherPath)) continue;
  
  let content = fs.readFileSync(launcherPath, 'utf8');
  
  // 检查是否已经 patch 过
  if (content.includes('shell:!0') || content.includes('shell: true')) {
    console.log(`[SKIP] ${dir} - 已经 patch 过`);
    continue;
  }
  
  // 找到 spawn 调用并添加 shell: true
  // 原始代码（混淆后）: child_process_1.default.spawn(e,n,_)
  // 其中 _ = {stdio:"ignore"} 或 _ = {stdio:"ignore",cwd:o}
  // 需要在 _ 对象中添加 shell: true
  
  // 方案：替换 spawn options 构造处
  // 原始: const _={stdio:"ignore"};
  // 替换: const _={stdio:"ignore",shell:true};
  const original = 'const _={stdio:"ignore"};';
  const replacement = 'const _={stdio:"ignore",shell:!0};';
  
  if (content.includes(original)) {
    content = content.replace(original, replacement);
    fs.writeFileSync(launcherPath, content, 'utf8');
    console.log(`[PATCHED] ${dir}/Launcher.js - 添加 shell:true`);
    patched++;
  } else {
    console.log(`[WARN] ${dir} - 未找到预期的 spawn options 模式`);
    // 尝试显示 spawn 附近的代码
    const spawnIdx = content.indexOf('child_process_1.default.spawn');
    if (spawnIdx > -1) {
      const context = content.substring(Math.max(0, spawnIdx - 100), spawnIdx + 100);
      console.log(`  spawn 上下文: ...${context}...`);
    }
  }
}

console.log(`\n完成: ${patched} 个文件已 patch`);
