/**
 * 修复语法并清理属性访问
 */
const fs = require('fs');

const inputPath = 'D:/temp/破解/cursorpro-0.4.5/deobfuscated_full/extension/out/webview/provider.js';

console.log('智能清理属性访问...');
let code = fs.readFileSync(inputPath, 'utf8');
console.log('原始大小:', (code.length / 1024).toFixed(2), 'KB');

// 1. 方法定义: async ['_method']() -> async _method()
code = code.replace(/(async\s+)\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\]\s*\(/g, '$1$3(');

// 2. 方法定义: } ['_method']()
code = code.replace(/(\}\s*)\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\]\s*\(/g, '$1$3(');

// 3. 独立的方法定义 (行首)
code = code.replace(/(\n\s*)\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\]\s*\(/g, '$1$3(');

// 4. 普通属性访问 + 方法调用: obj['prop']() -> obj.prop()
code = code.replace(/\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\1\]\s*\(/g, '.$2(');

// 5. 普通属性访问: obj['prop'] -> obj.prop (非方法调用)
code = code.replace(/\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\1\]/g, '.$2');

// 6. 布尔值简化
code = code.replace(/!!\[\]/g, 'true');
code = code.replace(/!\[\]/g, 'false');

// 7. 修复可能产生的语法错误: 独立的 .method( -> method(
// 这种情况出现在类方法定义中
const lines = code.split('\n');
for (let i = 0; i < lines.length; i++) {
    // 如果一行以 .methodName( 开头（可能有空格），这通常是方法定义
    const match = lines[i].match(/^(\s*)\.([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/);
    if (match) {
        lines[i] = match[1] + match[2] + '(' + lines[i].slice(match[0].length);
    }
}
code = lines.join('\n');

fs.writeFileSync(inputPath, code);
console.log('新大小:', (code.length / 1024).toFixed(2), 'KB');

// 验证
console.log('\n验证语法问题:');
const badAsync = (code.match(/async\s+\.\w+\s*\(/g) || []).length;
const badMethod = (code.match(/}\s*\.\w+\s*\(/g) || []).length;
const emptyAsync = (code.match(/async\s+\(\)\s*\{/g) || []).length;
console.log('  async .xxx():', badAsync);
console.log('  } .xxx():', badMethod);
console.log('  async () {}:', emptyAsync);

if (badAsync + badMethod + emptyAsync === 0) {
    console.log('\n✅ 语法检查通过！');
} else {
    console.log('\n⚠️ 仍有语法问题需要处理');
}
