from typing import List
from typing import Generator
from typing import Dict


def get_domain_name(labels: List[Generator[str, None, None]],
                    label_translator: List[Dict[int, str]], name: List[int]) -> str:
    """
    Returns a English domain name for the input Zen generated integer domain name.

    :param labels: List of label generators, one for each label index
    :param label_translator: List of maps for each label index from an
                                integer label to an English label.
    :param name: Zen generated domain name as a list of integers
    """
    english_name = []
    for index, integer_label in enumerate(name):
        # If integer label is 1, then it is a wildcard label
        if integer_label == 1:
            english_name.append('*')
        else:
            if integer_label not in label_translator[index]:
                label_translator[index][integer_label] = next(labels[index])
            english_name.append(label_translator[index][integer_label])
    # Zen generated domain names are in reverse order.
    # https://github.com/dns-groot/Ferret/blob/main/TestGenerator/Authoritative/DomainName.cs#L15-L17
    return '.'.join(english_name[::-1])