#!/usr/bin/env python3

# For each LRAUV module (xxModule/XxModule.cpp), this script calls
# ModuleToList.parse_to_list to generate a JSON representation of
# the module elements, which is saved to a destination directory,
# primarily for ingestion by TethysL.

import json
import os
import pathlib
import sys

from ModuleToList import parse_to_list


def export_to_json(list, dest_filename):
    # only actual entries (i.e., ignore COMMENT entries)
    entries = [u for u in list if 'name' in u]
    with open(dest_filename, 'w') as outfile:
        outfile.write(json.dumps(entries, indent=2))


def get_module_source_filenames(src_dir):
    files = os.listdir(src_dir)
    module_dirs = [os.path.join(src_dir, f) for f in files if f.endswith("Module")]
    sources = []
    for module_dir in module_dirs:
        sub_files = os.listdir(module_dir)
        for sub_file in sub_files:
            if sub_file.endswith("Module.cpp"):
                sources.append(os.path.join(module_dir, sub_file))
    return sorted(sources)


# Source/json/AllModulesToJson.py . Modules/json
if __name__ == '__main__':
    lrauv_dir = sys.argv[1]
    dest_dir = sys.argv[2]
    pathlib.Path(dest_dir).mkdir(parents=True, exist_ok=True)

    total_entries = 0
    module_source_filenames = get_module_source_filenames(os.path.join(lrauv_dir, "Source"))
    for module_source_filename in module_source_filenames:
        module_root_base, result = parse_to_list(lrauv_dir, module_source_filename)
        print(f"    {module_source_filename:60} {len(result):5} entries")
        total_entries += len(result)
        dest_json_filename = os.path.normpath( dest_dir + '/module' + module_root_base + '.json')
        export_to_json(result, dest_json_filename)
    print(f"    {'':60} {total_entries:5} total entries")
