import json
from subprocess import check_output


def filter_schema(obj, schema):
    if schema is True:
        return obj
    return {key: filter_schema(obj[key], value) for key, value in schema.items()}


entry_schema = {
    "name": True,
    "metrics": {"halstead": {"bugs": True, "difficulty": True}, "loc": {"ploc": True, "cloc": True, "blank": True}},
}

commits = check_output(["git", "log", "--pretty=%H"], text=True).splitlines()
entries = []
for i, commit in enumerate(commits):
    print("running", commit)
    check_output(["git", "checkout", commit], text=True)
    lines = check_output(
        ["rust-code-analysis-cli", "-m", "-p", "src", "-O", "json"], text=True
    ).splitlines()
    print(len(lines))
    for line in lines:
        entry = json.loads(line)
        entries.append((i, filter_schema(entry, entry_schema)))
with open("/code/metrics.json", "w") as file:
    json.dump(entries, file)