def METHOD_NAME(root_tag_name: str, xsd_path: str) -> list:
    try:
        my_schema = XMLSchema(xsd_path)
        root = my_schema.elements[root_tag_name]
    except URLError as e:
        raise ValueError('Invalid or unreadable XSD file path') from e
    except XMLSchemaParseError as e:
        raise ValueError('Invalid XSD file content') from e
    except KeyError as e:
        raise ValueError('Selected root element doesnt exist') from e
    if len(list(root.elem)) == 0:
        raise ValueError('Selected root element is empty')
    else:
        fields = []
        for element in root:
            is_repeated_element = (element.occurs[1] is None or
                                   element.occurs[1] > 1)
            if element.type.has_complex_content():
                fields.append(
                    process_complex_element(element, is_repeated_element))
            else:
                simple_element = {
                    'name': element.name,
                    'type': lookup_element_type(element.type)
                }
                if element.nillable:
                    simple_element['mode'] = 'NULLABLE'
                if is_repeated_element:
                    simple_element['mode'] = 'REPEATED'
                fields.append(simple_element)
        return fields