#!/usr/bin/env python3

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


def main():
    parser = argparse.ArgumentParser(
        description="Callout code generator")

    parser.add_argument(
        '-i', '--callouts_yaml', dest='callouts_yaml',
        default=os.path.join(script_dir, 'callouts-example.yaml'),
        help='input callouts yaml')
    parser.add_argument(
        '-o', '--output', dest='output',
        default='callouts-gen.hpp',
        help='output file name (default: callouts-gen.hpp)')

    args = parser.parse_args()

    with open(args.callouts_yaml, 'r') as fd:
        calloutsMap = yaml.safe_load(fd)

        # Render the mako template
        template = os.path.join(script_dir, 'callouts-gen.mako.hpp')
        t = Template(filename=template)
        with open(args.output, 'w') as fd:
            fd.write(
                t.render(
                    calloutsMap=calloutsMap))


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