#!/usr/bin/env python3
#
# Copyright (c) 2019, Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0

'''Tool for a simple parsing of YAML files and return a ;-list of <key>=<value>
pairs to use within a CMake build file.
'''

import argparse
import yaml
import pykwalify.core


METADATA_SCHEMA = '''\
## A pykwalify schema for basic validation of the structure of a
## metadata YAML file.
##
# The zephyr/module.yml file is a simple list of key value pairs to be used by
# the build system.
type: map
mapping:
  build:
    required: true
    type: map
    mapping:
      cmake:
        required: false
        type: str
      kconfig:
        required: false
        type: str
'''


def main():
    parser = argparse.ArgumentParser(description='''
    Converts YAML to a CMake list''')

    parser.add_argument('-i', '--input', required=True,
                        help='YAML file with data')
    parser.add_argument('-o', '--output', required=True,
                        help='File to write with CMake data')
    parser.add_argument('-s', '--section', required=True,
                        help='Section in YAML file to parse')
    args = parser.parse_args()

    with open(args.input, 'r') as f:
        meta = yaml.safe_load(f.read())

    pykwalify.core.Core(source_data=meta,
                        schema_data=yaml.safe_load(METADATA_SCHEMA)).validate()

    val_str = ''

    section = meta.get(args.section)
    if section is not None:
        for key in section:
            val_str += '{}={}\n'.format(key, section[key])

    with open(args.output, 'w') as f:
        f.write(val_str)


if __name__ == "__main__":
    main()
