package python

import (
	"context"
	"errors"
	"os/exec"
)

func DetectExecutable(ctx context.Context) (string, error) {
	// TODO: add a shortcut if .python-version file is detected somewhere in
	// the parent directory tree.
	//
	// See https://github.com/pyenv/pyenv#understanding-python-version-selection
	out, err := exec.LookPath("python3")
	// most of the OS'es have python3 in $PATH, but for those which don't,
	// we perform the latest version lookup
	if err != nil && !errors.Is(err, exec.ErrNotFound) {
		return "", err
	}
	if out != "" {
		return out, nil
	}
	// otherwise, detect all interpreters and pick the least that satisfies
	// minimal version requirements
	all, err := DetectInterpreters(ctx)
	if err != nil {
		return "", err
	}
	interpreter, err := all.AtLeast("3.8")
	if err != nil {
		return "", err
	}
	return interpreter.Path, nil
}