from argparse import ArgumentDefaultsHelpFormatter
from tiramisu_cmdline_parser.api import TiramisuHelpFormatter


def _leadership_to_dict(dico, ret):
    leader, *followers = list(dico)
    ret[leader.path()] = dico[leader]
    for follower in followers:
        follower_path = follower.path()
        ret.setdefault(follower_path, []).append(dico[follower])


def _to_dict(dico, ret):
    for key, value in dico.items():
        if key.isoptiondescription():
            if key.isleadership():
                _leadership_to_dict(value, ret)
            else:
                _to_dict(value, ret)
        else:
            ret[key.path()] = value


def to_dict(dico):
    ret = {}
    _to_dict(dico, ret)
    return ret


class TestHelpFormatter(TiramisuHelpFormatter, ArgumentDefaultsHelpFormatter):
    def __init__(self,
                 *args,
                 **kwargs,
                 ):
        return super().__init__(*args, **kwargs, width=5000)