from subprocess import Popen, PIPE
import sys

# Command line arguments are a list of maildirs.
# The output is a list of items in the form '((P1 A1) (P2 A2))' where P is the node path for a maildir
# node, and A is the mail count annotation text
# Exmaple: '(((treemacs-mu4e "/web/") " (176)")((treemacs-mu4e "/web/" "/web/Inbox") " (161)"))'

UNREAD_CMD  = "mu find maildir:'{}'  --fields 'i' flag:'unread' 2> /dev/null | wc -l"
PATH_PREFIX = "treemacs-mu4e"
LOCAL_PREFIX = "/" + sys.argv[1]

def main():
    maildirs = sys.argv[2:]

    output = ["("]
    for maildir in maildirs:

        mu_dir = maildir
        is_local = False
        is_leaf = not maildir.endswith("/")
        # "Local Folders" is an artificial maildir that is used to group
        # otherwise free standing folders under a single header like
        # in thunderbird
        if mu_dir.startswith(LOCAL_PREFIX):
            is_local = True
            mu_dir = mu_dir.replace(LOCAL_PREFIX, "")
            if mu_dir == "/":
                continue

        unread = Popen(UNREAD_CMD.format(mu_dir.replace(" ", "\ ")),
                       shell=True,
                       stdout=PIPE,
                       bufsize=100,
                       encoding='utf-8'
                    ).communicate()[0][:-1]

        if unread == "0":
            continue

        node_path = []
        path_item = "/"
        split_path = maildir.split("/")[1:] if is_leaf else maildir.split("/")[1:-1]

        # it makes difference for mu whether a maildir ends in a slash or not
        for i in range(0, len(split_path) - 1):
            path_item = path_item + split_path[i] + "/"
            node_path.append("\"" + path_item + "\"")
        final_item = "" if is_leaf else "/"
        node_path.append("\"" + path_item + split_path[-1] + final_item + "\"")

        suffix = '" ({})"'.format(unread)

        output.append('(({} {}) {})'.format(
            PATH_PREFIX, " ".join(node_path), suffix
        ))

    output.append(")")
    print("".join(output))

main()
