import os 

def make_tree(path="templates/content"):
    if '/' in path:
        tree = dict(name=path, children=[], type="directory")
    else:
        pass
    try: lst = os.listdir(path)
    except OSError:
        pass #ignore errors
    else:
        lst.sort()
        for name in lst:
            fn = os.path.join(path, name)
            if os.path.isdir(fn) and not fn.endswith(".git"):
                tree['children'].append(make_tree(fn))
            else:
                if fn.endswith('.md') and not name == "README.md":
                    tree['children'].append(dict(name=fn))
    return tree

def cut_path_tree(tree, subdir, file_ending):
    for key, val in tree.items():
        if isinstance(val, list):
            for item in val:
                item["name"] = item["name"][len(subdir):]
                if item["name"].endswith(file_ending):
                    item["name"] = item["name"][:-len(file_ending)]
                if isinstance(item, dict):
                    cut_path_tree(item, subdir, file_ending)
    return tree

def cut_filetype_tree(tree, filetype):
    for key, val in tree.items():
        if isinstance(val, list):
            for item in val:
                if item["name"].endswith(filetype):
                    item["name"] = item["name"][:-len(filetype)]
                    if isinstance(item, dict):
                        cut_filetype_tree(item, filetype)
    return tree

def list_files(path):
    doc_files = []
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(".md") and not ".git" in root:
                doc_files.append(os.path.join(root,file))
    return doc_files

def build_index(path, file_ending):
    searchable = dict(index=[]) 
    file_list = list_files(path) 
    for item in file_list:
        if item.endswith(file_ending):
            with open(item, 'r') as _f:
                data = _f.readlines()
                data[0] = data[0].strip('# \n')
                #searchable[data[0]] = [''.join(data), item[len(path):-len(file_ending)]]
                searchable["index"].append(dict(uri=item[len(path):-len(file_ending)] + '.html', title=data[0],tags=[],content=''.join(data), description=""))
                #searchable[str(uuid.uuid1())] = (dict(href=item[len(path):-len(file_ending)], title=data[0],tags=[],content=''.join(data)))
        if isinstance(item, dict):
           build_index(item)
    return searchable
