#!/usr/bin/env python

from __future__ import print_function

import knowledge_representation
from knowledge_representation.knowledge_loader import load_knowledge_from_yaml, populate_with_knowledge
import argparse


import warnings

import sys


def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("file_paths", type=str, nargs="+", help="Paths to knowledge YAML files")
    parser.add_argument("--allow-errors", type=bool, default=False, help="Allow warnings and non-fatal errors in "
                                                                         "loading to be ignored")
    # roslaunch passes additional arguments to <node> executables, so we'll gracefully ignore those
    args, unknown = parser.parse_known_args()
    ltmc = knowledge_representation.get_default_ltmc()

    with warnings.catch_warnings(record=True) as w:
        all_knowledge = []
        for path in args.file_paths:
            knowledge = load_knowledge_from_yaml(path)
            all_knowledge.append(knowledge)
        # Bail out from any loading issues here
        if not args.allow_errors and len(w) != 0:
            for warning in w:
                eprint(warning.message)
            eprint("Knowledge loading aborted due to warnings")
            exit(1)
        concept_count, instance_count = populate_with_knowledge(ltmc, all_knowledge)

        if not args.allow_errors and len(w) != 0:
            for warning in w:
                eprint(warning.message)
            eprint("Knowledge loading aborted due to warnings")
            exit(1)
        print("Loaded {} concepts and {} instances".format(concept_count, instance_count))


if __name__ == "__main__":
    main()
