#!/usr/bin/env python3
""" The master tools.py script """
import gettext
import os
import sys

from importlib import import_module

# Importing the various tools
from lib.cli.args import FullHelpArgumentParser

# LOCALES
_LANG = gettext.translation("tools", localedir="locales", fallback=True)
_ = _LANG.gettext

# Python version check
if sys.version_info < (3, 11):
    raise ValueError("This program requires at least python 3.11")


def bad_args(*args):  # pylint:disable=unused-argument
    """ Print help on bad arguments """
    PARSER.print_help()
    sys.exit(0)


def _get_cli_opts():
    """ Optain the subparsers and cli options for available tools """
    base_path = os.path.realpath(os.path.dirname(sys.argv[0]))
    tools_dir = os.path.join(base_path, "tools")
    for tool_name in sorted(os.listdir(tools_dir)):
        cli_file = os.path.join(tools_dir, tool_name, "cli.py")
        if os.path.exists(cli_file):
            mod = ".".join(("tools", tool_name, "cli"))
            module = import_module(mod)
            cliarg_class = getattr(module, f"{tool_name.title()}Args")
            help_text = getattr(module, "_HELPTEXT")
            yield tool_name, help_text, cliarg_class


if __name__ == "__main__":
    PARSER = FullHelpArgumentParser()
    SUBPARSER = PARSER.add_subparsers()
    for tool, helptext, cli_args in _get_cli_opts():
        cli_args(SUBPARSER, tool, helptext)
    PARSER.set_defaults(func=bad_args)
    ARGUMENTS = PARSER.parse_args()
    ARGUMENTS.func(ARGUMENTS)
