#!/usr/bin/env python3

import os
import sys
from argparse import ArgumentParser

import yaml
from mako.lookup import TemplateLookup

if __name__ == "__main__":
    parser = ArgumentParser(
        description="Power sequencer UCD90160 definition parser"
    )

    parser.add_argument(
        "-i",
        "--input_yaml",
        dest="input_yaml",
        default="example/ucd90160.yaml",
        help="UCD90160 definitions YAML",
    )

    parser.add_argument(
        "-o",
        "--output_dir",
        dest="output_dir",
        default=".",
        help="output directory",
    )

    args = parser.parse_args()

    if not args.input_yaml or not args.output_dir:
        parser.print_usage()
        sys.exit(1)

    with open(args.input_yaml, "r") as ucd90160_input:
        ucd90160_data = yaml.safe_load(ucd90160_input) or {}

    templates_dir = os.path.join(
        os.path.dirname(os.path.realpath(__file__)), "templates"
    )

    output_file = os.path.join(args.output_dir, "ucd90160_defs.cpp")

    mylookup = TemplateLookup(directories=templates_dir.split())
    mytemplate = mylookup.get_template("ucd90160_defs.mako.cpp")

    with open(output_file, "w") as output:
        output.write(mytemplate.render(ucd90160s=ucd90160_data))
