import os
import re


def articles_in_readme(readme_path):
    article_finder = re.compile(r'- \[\S+\]\((\S+)].md\)')
    with open(readme_path, 'r', encoding="UTF-8") as file:
        content = file.read()
        file.close()
    return article_finder.findall(content)


def is_markdown_file(filename):
    matcher = re.compile(r'\S+\.md')
    return True if matcher.match(filename) else False

def make_readme_article_name(filename):
    word_finder = re.compile(r"_?([A-Z][a-z]+")
    return ' '.join(word_finder.findall(filename))

def articles_in_directory(directory):
    files = list()
    for file in os.listdir(directory):
        if is_markdown_file(file) and file != "README.md":
            files.append(file)
    return files

def get_section_dirs():
    dirs = list()
    for dir in os.listdir():
        if dir not in [".git"] and os.path.isdir(dir):
            dirs.append(dir)
    return dirs

def readme_matches_directory_contents(directory):
    return True if (articles_in_readme(os.path.join(directory, 'README.md')) == articles_in_directory(directory)) else False


#This updates the Article section of the each README.md
def update_readme_contents(directory):
    readme_path = os.path.join(directory,"README.md")
    if readme_matches_directory_contents(directory):
        logging.debug("update_readme_contents : {} : there were no differences between directory and file".format(readme_path))
    else:
        with open(readme_path, 'a') as file:
            files_difference = list(set(articles_in_directory(directory))-set(articles_in_readme(readme_path)))
            for item in files_difference:
                file.write(f"- [{make_readme_article_name(item)}]({item})")
            file.close()


if __name__ == "__main__":
    for directory in get_section_dirs():
        update_readme_contents(directory)
        
