#!/usr/bin/env python3

import glob
import os
import errno
import subprocess
import sys

def add_pipx_venvs_to_syspath():
    """
    Adds all available pipx virtual environments' site-packages directories to sys.path.
    This function looks for any venv in ~/.local/pipx/venvs and appends their site-packages directory to sys.path.
    """
    python_version = f'{sys.version_info.major}.{sys.version_info.minor}'
    pipx_venvs_path = os.path.expanduser(f'~/.local/pipx/venvs/*/lib/python{python_version}/site-packages')
    matched_paths = glob.glob(pipx_venvs_path)
    if matched_paths:
        for path in matched_paths:
            sys.path.insert(0, path)

        return

    pipx_venvs_path = os.path.expanduser('~/.local/pipx/venvs/*/lib/python*/site-packages')
    matched_paths = glob.glob(pipx_venvs_path)
    if not matched_paths:
        return

    for path in matched_paths:
        sys.path.insert(0, path)

def main(args):
    sharedirs = ["./", "/opt/homebrew/share/ramalama", "/usr/local/share/ramalama", "/usr/share/ramalama"]
    syspath = next((d for d in sharedirs if os.path.exists(d+"/ramalama/cli.py")), None)
    if syspath:
        sys.path.insert(0, syspath)

    add_pipx_venvs_to_syspath()
    try:
        import ramalama
    except:
        print(f"ramalama module not found in sys.path: {sys.path}", file=sys.stderr)
        raise

    parser, args = ramalama.init_cli()

    # if autocomplete doesn't exist, just do nothing, don't break
    try:
        import argcomplete
        argcomplete.autocomplete(parser)
    except Exception:
        None

    if args.version:
        return ramalama.print_version(args)

    # Process CLI
    try:
        if ramalama.run_container(args):
            return

        args.func(args)
    except ramalama.HelpException:
        parser.print_help()
    except AttributeError:
        parser.print_usage()
        print("ramalama: requires a subcommand")
    except IndexError as e:
        ramalama.perror("Error: " + str(e).strip("'"))
        sys.exit(errno.EINVAL)
    except KeyError as e:
        ramalama.perror("Error: " + str(e).strip("'"))
        sys.exit(1)
    except NotImplementedError as e:
        ramalama.perror("Error: " + str(e).strip("'"))
        sys.exit(errno.ENOTSUP)
    except subprocess.CalledProcessError as e:
        sys.exit(e.returncode)
    except KeyboardInterrupt:
        sys.exit(0)


if __name__ == "__main__":
    main(sys.argv[1:])
