import puppeteer, { LaunchOptions } from "puppeteer";
import fs from "fs";

export async function launchBrowser() {
  const options: LaunchOptions = {
    headless: true,
    pipe: true,
    timeout: 60000,
    args: [
      "--no-sandbox",
      "--disable-setuid-sandbox",
      "--disable-gpu",
      "--disable-dev-shm-usage",
      "--disable-software-rasterizer",
      "--no-zygote",
      "--no-first-run",
      "--disable-background-networking",
      "--disable-extensions",
      "--password-store=basic",
      "--use-mock-keychain",
    ],
  };

  if (process.env.PUPPETEER_EXECUTABLE_PATH && fs.existsSync(process.env.PUPPETEER_EXECUTABLE_PATH)) {
    options.executablePath = process.env.PUPPETEER_EXECUTABLE_PATH;
  } else if (process.platform === "linux" && fs.existsSync("/usr/bin/google-chrome")) {
    options.executablePath = "/usr/bin/google-chrome";
  } else if (process.platform === "linux" && fs.existsSync("/usr/bin/chromium-browser")) {
    options.executablePath = "/usr/bin/chromium-browser";
  }

  return await puppeteer.launch(options);
}
