/* 不同模型厂家对匹配结果的影响演示
 * 架构：模型只做「理解层」→ 输出 JSON 画像 → 本地匹配算法（完全确定、与厂家无关）
 * 运行：node tests/model_test.js
 * 本测试：同一句输入，模拟不同模型输出不同画像，观察匹配结果差异
 */
const fs = require('fs');
const vm = require('vm');
const path = require('path');

const store = {};
globalThis.localStorage = {
    getItem: k => (k in store ? store[k] : null),
    setItem: (k, v) => { store[k] = String(v); },
    removeItem: k => { delete store[k]; }
};
globalThis.document = { addEventListener: () => {}, querySelectorAll: () => [] };

vm.runInThisContext(fs.readFileSync(path.join(__dirname, '..', 'app.js'), 'utf8'));

const input = '刚玩逆水寒手游，想找几个新手一起打副本。';
console.log(`【同一句输入】${input}\n`);

const models = [
    { name: '模型A（理解准确）', raw: { game: '逆水寒手游', intent: '新手求助', stage: '新手', tags: ['逆水寒手游', '新手', '副本', '组队'] } },
    { name: '模型B（游戏识别错）', raw: { game: '王者荣耀', intent: '组队', stage: '未知', tags: ['王者荣耀', '组队', '开黑'] } },
    { name: '模型C（意图理解错）', raw: { game: '逆水寒手游', intent: '攻略', stage: '进阶', tags: ['逆水寒手游', '攻略', '装备'] } },
    { name: '模型D（什么都没识别出）', raw: { game: null, intent: null, stage: null, tags: ['游戏'] } },
    { name: '模型E（游戏名方言）', raw: { game: '农药', intent: '组队', stage: '进阶', tags: ['农药', '组队', '开黑'] } }
];

console.log('════════ 本地规则模式（对照组，无模型）════════');
const localProfile = analyzeInput(input);
const localMatch = matchChannels(localProfile);
console.log(`画像: 游戏=${localProfile.game} 意图=${localProfile.intent} 阶段=${localProfile.stage} 标签=[${localProfile.tags.join(',')}]`);
console.log(`→ 推荐「${localMatch.best.channel.name}」 ${localMatch.best.total}分 (${matchLevel(localMatch.best.total)})`);
console.log('');

console.log('════════ 各"模型"输出同一输入时的匹配结果 ════════');
for (const m of models) {
    const profile = normalizeLLMProfile(m.raw);
    const result = matchChannels(profile);
    const best = result.best;
    const line = best
        ? `推荐「${best.channel.name}」 ${best.total}分 (${matchLevel(best.total)}) [状态:${result.status}]`
        : `无推荐 [状态:${result.status}]`;
    console.log(`【${m.name}】`);
    console.log(`  模型输出: game=${JSON.stringify(m.raw.game)} intent=${JSON.stringify(m.raw.intent)} stage=${JSON.stringify(m.raw.stage)} tags=[${(m.raw.tags || []).join(',')}]`);
    console.log(`  归一化后: game=${profile.game} intent=${profile.intent} stage=${profile.stage} 标签=[${profile.tags.join(',')}]`);
    console.log(`  ${line}\n`);
}
