import sys, json, collections; sys.path.insert(0, "/root/fwa1")
from common import A, BC
C = json.load(open("/root/fwa1/coins.json"))
PL = list(C[0]["ret"].keys())
TD = ["2026-09-30", "2026-10-01", "2026-10-02", "2026-10-03", "2026-10-04"]

def before(x, pred):
    return [y for y in C if y["rb"] < x["eb"] and pred(y)]

def hot(x):
    r = before(x, lambda y: y["badge"])[-0:]
    r = sorted(r, key=lambda y: y["rb"])[-10:]
    return len(r) >= 10 and sum(y["hit3"] for y in r) >= 4

def crewpick(x, plan="half3_10"):
    if not x["tag"]: return False
    r = before(x, lambda y: y["crew"] == x["tag"])
    return len(r) >= 5 and sum(y["ret"][plan] for y in r) / len(r) > 0

def best_exit(x):
    crew = x["tag"] or x["crew"]
    r = before(x, lambda y: y["crew"] == crew)
    if len(r) < 5: return "half3_10"
    return max(PL, key=lambda k: sum(y["ret"][k] for y in r) / len(r))

for x in C:
    if x["day"] in TD:
        x["hot"] = hot(x); x["pick"] = crewpick(x); x["bx"] = best_exit(x)

def rep(name, sel, exitf=lambda x: "half3_10"):
    row = [name]; allv = []
    for d in TD:
        v = [x["ret"][exitf(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 "- (0)")
    s = sorted(allv)
    row.append("%+.0f%% (%d)" % (100 * sum(s) / len(s), len(s)) if s else "-")
    row.append("%+.0f%%" % (100 * sum(s[:-1]) / (len(s) - 1)) if len(s) > 1 else "-")
    print(" | ".join(row))
    return allv

print("rule | " + " | ".join(TD) + " | total | best coin removed")
rep("all pond", lambda x: True)
rep("all badge", lambda x: x["badge"])
rep("tag A or B/C", lambda x: x["tag"] in (A, BC))
rep("HOT + tag A or B/C", lambda x: x["hot"] and x["tag"] in (A, BC))
rep("tag + crew pick", lambda x: x["pick"])
rep("HOT + tag + crew pick", lambda x: x["hot"] and x["pick"])
rep("HOT + tag + crew pick, own exit", lambda x: x["hot"] and x["pick"], lambda x: x["bx"])
rep("tag + crew pick, own exit", lambda x: x["pick"], lambda x: x["bx"])
rep("tag A or B/C, own exit", lambda x: x["tag"] in (A, BC), lambda x: x["bx"])
rep("HOT + tag A or B/C, own exit", lambda x: x["hot"] and x["tag"] in (A, BC), lambda x: x["bx"])
# HOT share
print("HOT on share of test coins:", sum(x["hot"] for x in C if x["day"] in TD), "/", sum(1 for x in C if x["day"] in TD))
print("crews picked:", collections.Counter(x["tag"] for x in C if x["day"] in TD and x["pick"]).most_common(12))
json.dump(C, open("/root/fwa1/coins2.json", "w"))
