"""Basket member volume (sum of 24h volume of the members) per day, same membership as bk_build."""
import json, glob, os, datetime as dt, sys
sys.path.insert(0, '/home/claude/chains')
from baskets_def import CMC_BASKETS, EXCLUDE, MEME, AI, DEFI
files = sorted(glob.glob('/home/claude/chains/snapB/*.json')); days = [os.path.basename(f)[:10] for f in files]
has = lambda t, s: bool(set(t) & s)
B = {b[0]: (b[1], b[3]) for b in CMC_BASKETS}
P = {"eth": "Ethereum", "bnb": "BNB Smart Chain (BEP20)"}
B['eth_memes'] = (P['eth'], lambda t: has(t, MEME)); B['eth_ai'] = (P['eth'], lambda t: has(t, AI))
B['bnb_memes'] = (P['bnb'], lambda t: has(t, MEME)); B['bnb_ai'] = (P['bnb'], lambda t: has(t, AI))
keys = [k for k in json.load(open('bk_clean.json')) if k not in ('btc', 'majors')]
mem = {k: None for k in keys}; vol = {k: {} for k in keys}; mc = {k: {} for k in keys}
for i, f in enumerate(files):
    d = days[i]; s = json.load(open(f)); byid = {c[0]: c for c in s}
    for k in keys:
        plat, rule = B[k]
        if mem[k] is None or dt.date.fromisoformat(d).weekday() == 0:
            xs = [c for c in s if c[3] == plat and not c[9] and c[1] not in EXCLUDE.get(k, set()) and rule(c[10]) and c[8] >= 25000 and c[6] > 0 and c[7] > 0]
            xs.sort(key=lambda c: -c[7]); m = [c[0] for c in xs[:15]]; mem[k] = m if len(m) >= 4 else None
        if mem[k]:
            v = [byid[c][8] for c in mem[k] if c in byid]; m2 = [byid[c][7] for c in mem[k] if c in byid]
            vol[k][d] = sum(v); mc[k][d] = sum(m2)
json.dump({'vol': vol, 'mc': mc}, open('bk_vol.json', 'w')); print('ok')
