(async function () {
    dispatcher.addTimer(new RealtimeTimer("AutoPick"));

    async function AutoPath(locationName) {
        let filePath = `assets/Benchmark/${locationName}.json`;
        await pathingScript.runFile(filePath);
        await sleep(1000);
    }

    function logScore(startTime, testName) {
        const endTime = Date.now();
        const timeTaken = (endTime - startTime) / 1000;
        const presetTimes = {
            '传送速度测试': 4500,
            '飞行速度测试': 3000,
            '游泳速度测试': 6000,
            '攀爬速度测试': 7000,
            '寻路速度测试': 12000,
            '抗打断测试': 9000
        };
        const score = presetTimes[testName] / timeTaken;
        log.info(`完成 ${testName} ，得分 ${score.toFixed(2)}`);
        return score;
    }

    async function runTest(testName, weight) {
        const startTime = Date.now();
        log.info('进行 {name}', testName);
        await AutoPath(testName);
        const score = await logScore(startTime, testName);
        scores.push({ name: testName, score, weight });
    }

    const weights = {
        '传送速度测试': 0.1,
        '飞行速度测试': 0.1,
        '游泳速度测试': 0.1,
        '攀爬速度测试': 0.1,
        '抗打断测试': 0.1,
        '寻路速度测试': 0.5
    };

    const scores = [];

    await runTest('传送速度测试', weights['传送速度测试']);
    await runTest('飞行速度测试', weights['飞行速度测试']);
    await runTest('游泳速度测试', weights['游泳速度测试']);
    await runTest('攀爬速度测试', weights['攀爬速度测试']);
    await runTest('寻路速度测试', weights['寻路速度测试']);
    await runTest('抗打断测试', weights['抗打断测试']);

    // 计算加权总得分
    const totalWeightedScore = scores.reduce((sum, item) => sum + item.score * item.weight, 0);
    log.info(`加权总得分：${totalWeightedScore.toFixed(2)}`);
    keyPress("m");
})();