// ── Python Runner ──────────────────────────────────────────────────
// Detects the system's Python executable (python vs python3) and runs
// a given script with arguments. Used by the dev:browser-use npm script.
// Avoids shell:true — spawns Python directly with its full path.
// Cross-platform: uses where (Windows) or which (Linux/Mac).

import { execSync, spawn } from "node:child_process"
import { platform } from "node:os"
import { statSync } from "node:fs"

function detectPython() {
  const commonPaths = [
    `${process.env.LOCALAPPDATA}\\Programs\\Python\\Python313\\python.exe`,
    `${process.env.LOCALAPPDATA}\\Programs\\Python\\Python312\\python.exe`,
    `${process.env.ProgramFiles}\\Python313\\python.exe`,
    `${process.env.ProgramFiles}\\Python312\\python.exe`,
  ]
  for (const p of commonPaths) {
    try {
      statSync(p)
      return p
    } catch {}
  }
  const candidates = platform() === "win32" ? ["python", "python3"] : ["python3", "python"]
  for (const cmd of candidates) {
    try {
      const out = execSync(platform() === "win32" ? `where ${cmd}` : `which ${cmd}`, { encoding: "utf8", timeout: 5000 })
      const path = out.trim().split("\n")[0].replace(/\r$/, "")
      if (path) return path
    } catch {}
  }
  console.error("Python not found. Install Python 3 from https://python.org")
  process.exit(1)
}

const PYTHON = detectPython()
const script = process.argv[2]
const args = process.argv.slice(3)

if (!script) {
  console.error("Usage: node run-python.mjs <script> [args...]")
  process.exit(1)
}

// Spawn Python with inherited stdio so the script's output is visible
const proc = spawn(PYTHON, [script, ...args], { stdio: "inherit" })
proc.on("exit", (code) => process.exit(code ?? 1))
