import sys, json, collections; sys.path.insert(0, "/root/fwa1")
from common import A, BC
C = json.load(open("/root/fwa1/coins2.json"))
TD = ["2026-09-30", "2026-10-01", "2026-10-02", "2026-10-03", "2026-10-04"]
def medpull(x):
    crew = x["tag"] or x["crew"]
    r = sorted(y["pull_s"] for y in C if y["crew"] == crew and y["rb"] < x["eb"] and y["pull_s"] is not None)
    return r[len(r) // 2] if len(r) >= 5 else None
for x in C:
    if x["day"] in TD:
        m = medpull(x); x["mp"] = m
        x["gx"] = "half3_10" if m is None else ("all2x" if m < 90 else "half3_10" if m < 200 else "all10x")
def rep(name, sel, ex):
    row = [name]; allv = []
    for d in TD:
        v = [x["ret"][ex(x)] for x in C if x["day"] == d and sel(x)]; allv += v
        row.append("%+.0f%% (%d)" % (100 * sum(v) / len(v), len(v)) if v else "-")
    s = sorted(allv)
    row += ["%+.0f%% (%d)" % (100 * sum(s) / len(s), len(s)), "%+.0f%%" % (100 * sum(s[:-1]) / (len(s) - 1))]
    print(" | ".join(row))
pick = lambda x: x["pick"]; ab = lambda x: x["tag"] in (A, BC)
print("rule | " + " | ".join(TD) + " | total | best removed")
rep("tag + crew pick, per-crew best fit (old)", pick, lambda x: x["bx"])
rep("tag + crew pick, general pull-time rule", pick, lambda x: x["gx"])
rep("tag + crew pick, pull-time rule but A/BC all 2x", pick, lambda x: "all2x" if ab(x) else x["gx"])
rep("tag + crew pick, all at 2x", pick, lambda x: "all2x")
rep("tag A or B/C, all at 2x", ab, lambda x: "all2x")
rep("tag A or B/C, general pull-time rule", ab, lambda x: x["gx"])
rep("HOT + tag + crew pick, general pull-time rule", lambda x: x["hot"] and x["pick"], lambda x: x["gx"])
rep("HOT + tag + crew pick, A/BC all 2x", lambda x: x["hot"] and x["pick"], lambda x: "all2x" if ab(x) else x["gx"])
print(collections.Counter((x["tag"], x["gx"]) for x in C if x["day"] in TD and x["pick"]).most_common(12))
