from dataclasses import dataclass, field
from htmltree import *


def all_text(tree: HTMLTree) -> list:
    text = []
    child_text = [subtext for child in tree.children for subtext in all_text(child)]
    if tree.tag == "text":
        return [tree.text] + child_text
    return child_text


# PROBLEM 1
def all_bold_text(tree: HTMLTree) -> list:
    """
    Returns the text of all <text> tags that are descendants of <strong> tags,
    as a list of strings
    """
    if tree.tag == "strong":
        return all_text(tree)
    return [text for child in tree.children for text in all_bold_text(child)]


# PROBLEM 2
def get_longest_ul_length(tree: HTMLTree) -> int:
    """
    Returns the number of entries in the longest (most children) "ul" tag in the tree
    """
    longest = 0
    if tree.tag == "ul":
        longest = len(tree.children)
    for child in tree.children:
        longest_in_child = get_longest_ul_length(child)
        if longest_in_child > longest:
            longest = longest_in_child
    return longest


# PROBLEM 3
def strong_to_emph(tree: HTMLTree):
    """
    Changes all <strong> tags in the tree to <emph> tags
    """
    if tree.tag == "strong":
        tree.tag = "emph"
    for child in tree.children:
        strong_to_emph(child)