#!/usr/bin/env python3

"""
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
"""

import argparse
import json
import composer

def main():
    parser = argparse.ArgumentParser(description='compile compositions', prog='pycompose', usage='%(prog)s composition.py command [flags]')
    parser.add_argument('file', metavar='composition', type=str, help='the composition')
    parser.add_argument('-v', '--version', action='version', version='%(prog)s '+ composer.__version__)
    parser.add_argument('--ast', action='store_true', help='output ast')

    args = parser.parse_args()

    filename = args.file
    with open(filename, encoding='UTF-8') as f:
        source = f.read()

    main = '''exec(code + "\\n__out__['value'] = main()", {'__out__':__out__})'''

    try:
        out = {'value': None}
        exec(main, {'code': source, '__out__': out})

        composition = out['value']
        composition = composition.compile()

        if args.ast:
            composition = composition['ast']

        print(json.dumps(composition, default=composer.serialize, ensure_ascii=True))
    except Exception as err:
        print(err)
        return

if __name__ == '__main__':
    main()
