#!/usr/bin/env python3

import argparse
import os
import sys

import yaml
from mako.template import Template


def generate_cpp(sensor_yaml, output_dir):
    with open(sensor_yaml, "r") as f:
        ifile = yaml.safe_load(f)
        if not isinstance(ifile, dict):
            ifile = {}

        # Render the mako template

        t = Template(filename=os.path.join(script_dir, "writesensor.mako.cpp"))

        output_cpp = os.path.join(output_dir, "sensor-gen.cpp")
        with open(output_cpp, "w") as fd:
            fd.write(t.render(sensorDict=ifile))


def main():
    valid_commands = {"generate-cpp": generate_cpp}
    parser = argparse.ArgumentParser(
        description="IPMI Sensor parser and code generator"
    )

    parser.add_argument(
        "-i",
        "--sensor_yaml",
        dest="sensor_yaml",
        default="example.yaml",
        help="input sensor yaml file to parse",
    )

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

    parser.add_argument(
        "command",
        metavar="COMMAND",
        type=str,
        choices=valid_commands.keys(),
        help="Command to run.",
    )

    args = parser.parse_args()

    if not (os.path.isfile(args.sensor_yaml)):
        sys.exit("Can not find input yaml file " + args.sensor_yaml)

    function = valid_commands[args.command]
    function(args.sensor_yaml, args.outputdir)


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