from typing import Tuple
from typing import Dict
import re


def dep_tree_line_to_dict(line: str) -> Tuple[int, Dict]:
    """dependency walker のツリー部分のテキスト 1 行を辞書形式にする。

    Args:
        line (str): 1 行のテキスト

    Returns:
        Tuple[int, Dict]: インデントからわかる階層番号と情報

    Note:
        インデントがない状態の階層数を 0 とする。
    """
    legend = {
        " ": "None",
        "F": "Forwarded Module",
        "D": "Delay Load Module",
        "*": "Dynamic Module",
        "?": "Missing Module",
        "!": "Invalid Module",
        "E": "Import/Export Mismatch or Load Failure",
        "^": "Duplicate Module",
        "6": "64-bit Module",
    }
    space_num = 5
    pattern = re.compile(r"^(\s*)\[(.)(.)(.)\] (.*)$")
    result = re.match(pattern, line)
    if result is None:
        return (0, {})
    data = result.groups()
    if len(data) < 5:
        return (0, {})

    return (
        len(data[0]) // space_num,
        {
            "legend1": legend[data[1]],
            "legend2": legend[data[2]],
            "legend3": legend[data[3]],
            "name": data[4].strip(),
        },
    )