import cp from "child_process";
import { patchPythonPath } from "./system-requirements.js";

async function main() {
  let pythonCommand: string[];

  try {
    // First try to resolve Python path
    pythonCommand = await patchPythonPath(["python", "./eng/scripts/setup/install.py"], {
      version: ">=3.10",
      environmentVariable: "AUTOREST_PYTHON_EXE",
    });
  } catch (error) {
    console.log(`Ran into the following error when setting up your local environment: ${error}`); // eslint-disable-line no-console
    return;
  }

  try {
    // Python found, now try to run the installation script
    cp.execSync(pythonCommand.join(" "), {
      stdio: [0, 1, 2],
    });
    console.log("Found Python on your local environment and created a venv with all requirements."); // eslint-disable-line no-console
  } catch (error: any) {
    // Check the exit code to determine the type of error
    if (error.status === 2) {
      // Exit code 2: Python/pip not adequate - use Pyodide
      console.log("No Python found on your local environment. We will use Pyodide instead."); // eslint-disable-line no-console
    } else {
      // Exit code 1 or other: Python and pip were found but installation failed - fail the npm install
      console.error("Python and package manager found but installation failed."); // eslint-disable-line no-console
      process.exit(1);
    }
  }
}

main();
