// FILE: _St/IG_StYellow/test_ext_main_scope_auto_restore_v279bb.js | ROLE: MAIN hover 스코프 오류 제거·자동 다운로드 초기화 지속 회귀 검사
const assert = require('assert');
const fs = require('fs');
const path = require('path');
const vm = require('vm');

const root = __dirname;
const inject = fs.readFileSync(path.join(root, 'js', 'instagram_inject.js'), 'utf8');
const side = fs.readFileSync(path.join(root, 'side.js'), 'utf8');
const manifest = JSON.parse(fs.readFileSync(path.join(root, 'manifest.json'), 'utf8'));

assert.strictEqual(manifest.version, '2.3.8.2910');
assert.strictEqual(manifest.version_name, '2.3.8.291');
assert.ok(side.includes('const IGBLUE_PACKAGE_VERSION = "v288";'));

const mainCloseMarker = '\n}();\n\n// IGblue v80 patch:';
const mainClose = inject.indexOf(mainCloseMarker);
assert.ok(mainClose > 0, 'MAIN core IIFE 종료 위치를 찾지 못했습니다.');
const afterMain = inject.slice(mainClose + 5);
assert.ok(afterMain.includes('const hoverDiagnosticEnabled = window.__IGBLUE_MAIN_HOVER_DIAGNOSTIC_ENABLED__ === true;'));
assert.ok(!afterMain.includes('if(!IGBLUE_MAIN_HOVER_DIAGNOSTIC_ENABLED){'), '외부 IIFE가 MAIN 지역변수를 직접 참조하면 안 됩니다.');

const blockStart = inject.indexOf('/* v279aaa diagnostic: Main hover account selection and hover color/coordinate tracking are disabled. */');
const blockEnd = inject.indexOf('// v179a54: Chrome window geometry detector.', blockStart);
assert.ok(blockStart >= 0 && blockEnd > blockStart, 'hover 진단 패치 블록을 찾지 못했습니다.');
const hoverBlock = inject.slice(blockStart, blockEnd);
function runHoverBlock(windowState) {
  const context = {
    window: windowState,
    document: {
      getElementById: () => null,
      querySelectorAll: () => []
    },
    console
  };
  vm.runInNewContext(`${hoverBlock}\nwindow.__IGBLUE_SCOPE_TEST_AFTER__ = true;`, context);
  assert.strictEqual(context.window.__IGBLUE_SCOPE_TEST_AFTER__, true, 'hover 비활성 분기가 ReferenceError 없이 종료돼야 합니다.');
}
runHoverBlock({});
runHoverBlock({ __IGBLUE_MAIN_HOVER_DIAGNOSTIC_ENABLED__: false });

assert.ok(inject.includes('new CustomEvent("ndy_ig_bg_down"'), 'MAIN 다운로드 전달 이벤트가 유지돼야 합니다.');
assert.ok(side.includes('teAutoPyDownloadMediaPairDirect('), '자동 Top MP4/JPG 직접 다운로드 실행부가 유지돼야 합니다.');
assert.ok(side.includes('auto_snapshot_rank_target'), '정상 snapshot 자동 다운로드 경로가 유지돼야 합니다.');
assert.ok(side.includes('teProgressPreserveUntilNextDownload(newSession ? "auto_start_new_run" : "auto_account_continue")'), 'v279b 다운로드 상태 보존 기능을 유지해야 합니다.');

console.log('test_ext_main_scope_auto_restore_v279bb: OK');
