// Разрешаем встроенному скрипту читать библиотеки с диска
const { createRequire } = require('module');
const myRequire = createRequire(__filename);

const { install, computeExecutablePath, resolveBuildId } = myRequire('@puppeteer/browsers'); 
const puppeteer = myRequire('puppeteer-extra'); 
const StealthPlugin = myRequire('puppeteer-extra-plugin-stealth'); 
const path = myRequire('path');

// 1. Включаем плагин маскировки под реального пользователя
const stealth = StealthPlugin();
puppeteer.use(stealth);

async function main(url, other) {
  const cacheDir = path.join(__dirname, 'chrome-stable');

  console.log('Узнаем номер последней стабильной версии Chrome...');
  const platform = process.platform === 'win32' ? 'win64' : process.platform === 'darwin' ? 'mac' : 'linux64';
  
  const activeBuildId = await resolveBuildId('chrome', platform, 'stable');
  console.log(`Найдена активная версия: ${activeBuildId}`);

  console.log('Скачиваем чистую обычную версию Chrome...');
  await install({
    browser: 'chrome', 
    buildId: activeBuildId,
    cacheDir: cacheDir
  });

  const chromePath = computeExecutablePath({
    browser: 'chrome',
    buildId: activeBuildId,
    cacheDir: cacheDir
  });

  console.log('Браузер готов. Запускаем окно...');

  // 3. Запускаем скачанный Chrome со специальными флагами маскировки
  const browser = await puppeteer.launch({
    executablePath: chromePath,
    headless: false,
    userDataDir: path.join(__dirname, 'user_data'),
    
    // ОТКЛЮЧАЕМ ЛИШНИЕ ОКНА И ИНТЕРФЕЙСЫ РОБОТА:
    defaultViewport: null, 
    ignoreDefaultArgs: ['--enable-automation'], 
    
    args: [
      '--disable-blink-features=AutomationControlled', // Скрывает признак робота
      '--no-sandbox',
      ...other
    ]
  });

  // Открываем страницу только если это не точка для режима приложения
  if (url !== ".") {
    const page = await browser.pages().then(pages => pages[0]);
    if (page) {
      await page.goto(url);
    }
  }
};

function handlebrowser() {
  let url = process.argv[2] || "chrome://newtab";
  let other = process.argv.slice(3);
  main(url, other).catch(err => console.error(err));
};

handlebrowser();
