import os
import platform
import subprocess
from typing import Union


def check_exec(name: Union[os.PathLike[str], str]) -> bool:
    if is_windows():
        check_process = subprocess.Popen([
            "where.exe", name
        ], stdout=subprocess.PIPE)
        check_process.wait()
        return len(check_process.stdout.readlines()) > 0
    elif is_linux():
        check_process = subprocess.Popen([
            "which", name
        ], stdout=subprocess.PIPE)
        check_process.wait()
        return check_process.returncode == 0
    else:
        return False


def is_windows() -> bool:
    return platform.system().lower() == "windows"


def is_linux() -> bool:
    return platform.system().lower() == "linux"