#!/usr/bin/env python3
import json, os, subprocess, time, statistics

LAB = "/Users/oscar/.worktree/hot-reload/labs/hot-reload"
SRC = os.path.join(LAB, "api-common/src/lib.rs")
REC = "/Users/oscar/.worktree/hot-reload/labs/hot-reload/target/kan-hot/debug/rustc"
original = open(SRC).read()

def load(name):
    d = json.load(open(os.path.join(REC, name + ".json")))
    return d["argv"], d["cwd"], d["env"]

api_argv, cwd, env = load("api")
ac_argv, _, _ = load("api_common")

variants = {
    "cgu16": [],
    "cgu16_pref_dyn": ["-C", "prefer-dynamic"],
    "cgu16_opt1": ["-C", "opt-level=1"],
    "cgu16_opt2": ["-C", "opt-level=2"],
    "cgu16_no_debug_assert": ["-C", "debug-assertions=off"],
    "cgu16_no_overflow": ["-C", "overflow-checks=off"],
}
results = {k: [] for k in variants}
for rep in range(6):
    for idx, (name, extra) in enumerate(variants.items()):
        marker = "nested-" + f"{rep * len(variants) + idx:02x}"
        open(SRC, "w").write(original.replace("nested-v1", marker))
        start = time.monotonic()
        for argv in (ac_argv + extra, api_argv + extra):
            r = subprocess.run(argv, cwd=cwd, env=dict(env), stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
            if r.returncode != 0:
                print(name, r.stderr.decode()[:1500]); raise SystemExit(1)
        results[name].append((time.monotonic() - start) * 1000)
open(SRC, "w").write(original)
for name, vals in results.items():
    print(f"{name:24} median={statistics.median(vals):6.1f} mean={statistics.mean(vals):6.1f} {[round(v) for v in vals]}")
