#!/usr/bin/env python3

import argparse

from bragi.parser import CompilationUnit
from bragi.cpp_generator import CodeGenerator

parser = argparse.ArgumentParser(prog = 'bragi', description = 'Bragi IDL to C++ compiler')
parser.add_argument('input', nargs=1, help='input file')
parser.add_argument('output', nargs=1, help='output file')
parser.add_argument('-l', '--lib', nargs=1, help='C++ library to use', choices=['frigg', 'stdc++'], default='libc++')
parser.add_argument('--protobuf', help='Generate protobuf compatibilty methods (SerializeAsString/ParseFromArray)', action='store_true')
args = parser.parse_args()

source = args.input[0]
output = args.output[0]
lib = args.lib[0]

with open(source, "r") as f:
    code = f.read()
    unit = CompilationUnit(source, code)
    unit.process()
    unit.verify()

    generator = CodeGenerator(unit, lib, protobuf_compat = args.protobuf)
    with open(output, "w") as o:
        o.write(generator.generate())
