#!/usr/bin/env python

import os
import sys
from pathlib import Path

sys.path.insert(1, os.path.join(os.path.dirname(__file__), "..", ".."))

from binding_generator import _generate_bindings, _get_file_list
from build_profile import generate_trimmed_api

api_filepath = "gdextension/extension_api.json"
interface_filepath = "gdextension/gdextension_interface.json"
bits = "64"
precision = "single"
output_dir = "self_test"


def test(profile_filepath=""):
    api = generate_trimmed_api(api_filepath, profile_filepath)
    _generate_bindings(
        api,
        api_filepath,
        interface_filepath,
        use_template_get_node=False,
        bits=bits,
        precision=precision,
        output_dir=output_dir,
    )
    flist = _get_file_list(api, output_dir, headers=True, sources=True)

    p = Path(output_dir) / "gen"
    allfiles = [str(f.as_posix()) for f in p.glob("**/*.*")]
    missing = list(filter((lambda f: f not in flist), allfiles))
    extras = list(filter((lambda f: f not in allfiles), flist))
    if len(missing) > 0 or len(extras) > 0:
        print("Error!")
        for f in missing:
            print("MISSING: " + str(f))
        for f in extras:
            print("EXTRA: " + str(f))
        sys.exit(1)
    else:
        print("OK!")


test()
test("test/build_profile.json")
