#!/usr/libexec/platform-python

import argparse
import os
from lxml import etree
from jinja2 import Environment, FileSystemLoader
from enyx_hw_gen.xml_parser import core_from_xml


def main():
    parser = argparse.ArgumentParser(description='Generate code from template')
    parser.add_argument('--output', '-o', help='output directory',
                        default='output')
    parser.add_argument('--xml-descriptions', '-x', required=True,
                        help='XML cores descriptions to translate', nargs='+')
    parser.add_argument('--template-folder', '-f', required=True,
                        help='path to template folder')
    parser.add_argument('--templates', '-t', required=True,
                        help='Templates to use', nargs='+')

    args = parser.parse_args()
    print(args)

    env = Environment(loader=FileSystemLoader(args.template_folder))

    for description in args.xml_descriptions:
        with open(description) as f:
            xml_parser = etree.XMLParser(remove_comments=True)
            doc = etree.parse(f, xml_parser)
        root = doc.getroot()
        cores = list(map(core_from_xml, root))
        for template_name in args.templates:
            template = env.get_template(template_name)
            for core in cores:
                mod = template.make_module({'core': core})
                output_file_path = mod.output_file_path(core)
                os.makedirs(os.path.dirname(os.path.join(args.output,
                                                         output_file_path)),
                            exist_ok=True)
                with open(os.path.join(args.output, output_file_path),
                          'w') as f:
                    f.write(template.render(core=core))


if __name__ == '__main__':
    main()
