#!/usr/bin/python3

import sys
import os

for root, dirs, _ in os.walk("/usr/lib/python3/dist-packages"):
    for dir_name in dirs:
        if dir_name.startswith("kare"):
            sys.path.append(os.path.join(root, dir_name))

import argparse
from buildenv.buildenv import BuildEnv
from install.install import Install
from manager.manager import *
from run.run import Run
from run.inspect import Inspect
from remove.remove import Remove


def main():
    release_replace = {
        "ubuntu16.04": "u16",
        "ubuntu18.04": "u18",
        "ubuntu20.04": "u20",
        "ubuntu22.04": "u22",
        "ubuntu24.04": "u24",
    }
    parser = argparse.ArgumentParser(description="Kare Command Line Tool")
    subparsers = parser.add_subparsers(dest='command', required=False)
    # run 子命令
    run_parser = subparsers.add_parser('run', help="使用KARE运行软件")
    run_parser.add_argument("run_args", nargs=argparse.REMAINDER)

    # inspect 子命令
    inspect_parser = subparsers.add_parser('inspect', help="使用KARE进行Debug")
    inspect_parser.add_argument("inspect_args", nargs=argparse.REMAINDER)
    arg_group = parser.add_mutually_exclusive_group()
    arg_group.add_argument("-E", action="store_true", help="列出构建完成的兼容运行环境")
    arg_group.add_argument("-l", action="store_true", help="列出已安装的软件包")
    arg_group.add_argument("-b", dest="build_release", help="构建兼容运行环境")
    arg_group.add_argument("-L", dest="file_list", help="列出软件包的已安装文件")
    arg_group.add_argument("-P", dest="purge",nargs='+', help="模糊移除软件包")
    arg_group.add_argument("-S", dest="search", help="列出文件所在软件包及路径")
    arg_group.add_argument("-e", dest="env", help="指定软件包安装环境")
    parser.add_argument("-i", dest="install", nargs='+',help="安装软件包")
    parser.add_argument("--chroot", dest="chroot", help="指定chroot环境路径")

    # TODO 跨版本升级接口
    # TODO 工作空间相关接口
    argslist = parser.parse_args()

    if argslist.E:
        try:
            Manager().get_build_envs
        except Exception as e:
            ...

    elif argslist.l:
        try:
            Manager().get_install_packages
        except Exception as e:
            ...

    elif argslist.build_release:
        build_release = release_replace.get(argslist.build_release, argslist.build_release)

        try:
            BuildEnv(build_release, True if argslist.chroot else False)
        except RuntimeError as e:
            print(e.args[0][-1])
            exit(e.args[0][0])

    elif argslist.file_list:
        try:
            Manager().get_packages_list(argslist.file_list)
        except Exception as e:
            ...

    elif argslist.purge:
        
        try:
            Remove(argslist.purge)
        except RuntimeError as e:
            print(e.args[0][-1])
            exit(e.args[0][0])

    elif argslist.search:
        Manager().search(argslist.search)

    elif argslist.env:
        env = release_replace.get(argslist.env, argslist.env)
        try:
            Install(env, argslist.install, True if argslist.chroot else False)
        except RuntimeError as e:
            print(e.args[0][-1])
            exit(e.args[0][0])

    elif argslist.command == 'run':
        try:
            Run(argslist.run_args[0:])
        except RuntimeError as e:
            print(e.args[0][-1])
            exit(e.args[0][0])
            
    elif argslist.command == 'inspect':
        try:
            Inspect(argslist.inspect_args[0:])
        except RuntimeError as e:
            print(e.args[0][-1])
            exit(e.args[0][0])

    elif argslist.install:
        print("install 需要-e参数指定安装环境")
    else:
        parser.print_help()


if __name__ == "__main__":
    main()
