#!/usr/bin/env python

import os
import yaml
from mako.template import Template
import argparse


def main():
    parser = argparse.ArgumentParser(
        description="Settings YAML parser and code generator")

    parser.add_argument(
        '-i', '--settings_yaml', dest='settings_yaml',
        default='settings_example.yaml', help='settings yaml file to parse')
    args = parser.parse_args()

    with open(os.path.join(script_dir, args.settings_yaml), 'r') as fd:
        yamlDict = yaml.safe_load(fd)

        # Render the mako template
        template = os.path.join(script_dir, 'settings_manager.mako.hpp')
        t = Template(filename=template)
        with open('settings_manager.hpp', 'w') as fd:
            fd.write(
                t.render(
                    settingsDict=yamlDict))


if __name__ == '__main__':
    script_dir = os.path.dirname(os.path.realpath(__file__))
    main()
