# -*- coding: utf-8 -*-
import os
import json
module_types = ['expansion', 'export_mod', 'import_mod']
titles = ['Expansion Modules', 'Export Modules', 'Import Modules']
markdown = ["# MISP modules documentation\n"]
githublink = 'https://github.com/MISP/misp-modules/tree/master/misp_modules/modules'
def generate_doc(root_path):
    for _path, title in zip(module_types, titles):
        markdown.append('\n## {}\n'.format(title))
        current_path = os.path.join(root_path, _path)
        files = sorted(os.listdir(current_path))
        githubpath = '{}/{}'.format(githublink, _path)
        for _file in files:
            modulename = _file.split('.json')[0]
            githubref = '{}/{}.py'.format(githubpath, modulename)
            markdown.append('\n#### [{}]({})\n'.format(modulename, githubref))
            filename = os.path.join(current_path, _file)
            with open(filename, 'rt') as f:
                definition = json.loads(f.read())
            if 'logo' in definition:
                markdown.append('\n \n'.format(definition.pop('logo')))
            if 'description' in definition:
                markdown.append('\n{}\n'.format(definition.pop('description')))
            for field, value in sorted(definition.items()):
                if value:
                    value = ', '.join(value) if isinstance(value, list) else '{}'.format(value.replace('\n', '\n>'))
                    markdown.append('- **{}**:\n>{}\n'.format(field, value))
            markdown.append('\n-----\n')
    with open('README.md', 'w') as w:
        w.write(''.join(markdown))
def generate_docs_for_mkdocs(root_path):
    for _path, title in zip(module_types, titles):
        markdown = []
        #markdown.append('## {}\n'.format(title))
        current_path = os.path.join(root_path, _path)
        files = sorted(os.listdir(current_path))
        githubpath = '{}/{}'.format(githublink, _path)
        for _file in files:
            modulename = _file.split('.json')[0]
            githubref = '{}/{}.py'.format(githubpath, modulename)
            markdown.append('\n#### [{}]({})\n'.format(modulename, githubref))
            filename = os.path.join(current_path, _file)
            with open(filename, 'rt') as f:
                definition = json.loads(f.read())
            if 'logo' in definition:
                markdown.append('\n
\n'.format(definition.pop('logo')))
            if 'description' in definition:
                markdown.append('\n{}\n'.format(definition.pop('description')))
            for field, value in sorted(definition.items()):
                if value:
                    value = ', '.join(value) if isinstance(value, list) else '{}'.format(value.replace('\n', '\n>'))
                    markdown.append('- **{}**:\n>{}\n'.format(field, value))
            markdown.append('\n-----\n')
    with open('README.md', 'w') as w:
        w.write(''.join(markdown))
def generate_docs_for_mkdocs(root_path):
    for _path, title in zip(module_types, titles):
        markdown = []
        #markdown.append('## {}\n'.format(title))
        current_path = os.path.join(root_path, _path)
        files = sorted(os.listdir(current_path))
        githubpath = '{}/{}'.format(githublink, _path)
        for _file in files:
            modulename = _file.split('.json')[0]
            githubref = '{}/{}.py'.format(githubpath, modulename)
            markdown.append('\n#### [{}]({})\n'.format(modulename, githubref))
            filename = os.path.join(current_path, _file)
            with open(filename, 'rt') as f:
                definition = json.loads(f.read())
            if 'logo' in definition:
                markdown.append('\n \n'.format(definition.pop('logo')))
            if 'description' in definition:
                markdown.append('\n{}\n'.format(definition.pop('description')))
            for field, value in sorted(definition.items()):
                if value:
                    value = ', '.join(value) if isinstance(value, list) else '{}'.format(value.replace('\n', '\n>'))
                    markdown.append('- **{}**:\n>{}\n'.format(field, value))
            markdown.append('\n-----\n')
        with open(root_path+"/../"+"/docs/"+_path+".md", 'w') as w:
            w.write(''.join(markdown))
if __name__ == '__main__':
    root_path = os.path.dirname(os.path.realpath(__file__))
    generate_doc(root_path)
    generate_docs_for_mkdocs(root_path)
\n'.format(definition.pop('logo')))
            if 'description' in definition:
                markdown.append('\n{}\n'.format(definition.pop('description')))
            for field, value in sorted(definition.items()):
                if value:
                    value = ', '.join(value) if isinstance(value, list) else '{}'.format(value.replace('\n', '\n>'))
                    markdown.append('- **{}**:\n>{}\n'.format(field, value))
            markdown.append('\n-----\n')
        with open(root_path+"/../"+"/docs/"+_path+".md", 'w') as w:
            w.write(''.join(markdown))
if __name__ == '__main__':
    root_path = os.path.dirname(os.path.realpath(__file__))
    generate_doc(root_path)
    generate_docs_for_mkdocs(root_path)