import json,collections,unicodedata,re
T=[t for t in json.load(open('romplayers.json')) if len(t['players'])==26]
def norm(s): s=unicodedata.normalize('NFKD',s).encode('ascii','ignore').decode().lower(); return re.sub(r'[^a-z]','',s)
bio={};sm={};rt={}
for s in ('20242025','20252026'):
    for p in json.load(open(f'sk_bios_{s}.json'))['data']: bio[p['playerId']]=p
    for p in json.load(open(f'sk_summary_{s}.json'))['data']: sm.setdefault(p['playerId'],[]).append(p)
    for p in json.load(open(f'sk_realtime_{s}.json'))['data']: rt.setdefault(p['playerId'],[]).append(p)
byname={}
for pid,b in bio.items(): byname.setdefault(norm(b['skaterFullName']),[]).append(pid)
NIB=['wgt','agi','spd','off','def','pow','chk','hf','stk','acc','end','u11','pas','agg']
rows=[]
for ti,t in enumerate(T):
    for k,p in enumerate(t['players']):
        n=[int(c,16) for c in p['raw']]
        rows.append(dict(team=ti,idx=k,name=p['name'],jer=p['jer'],nib=n,pid=(byname.get(norm(p['name'].replace('_',' '))) or [None])[0]))
json.dump(rows,open('rows.json','w'))
sk=[r for r in rows if r['idx']>=3]
print('teams',len(T),'skaters',len(sk),'matched',sum(1 for r in sk if r['pid']))
# handedness vs nibble 7
c=collections.Counter()
for r in sk:
    if r['pid']: c[(bio[r['pid']]['shootsCatches'],r['nib'][7])]+=1
print(sorted(c.items()))
print('u11',collections.Counter(r['nib'][11] for r in sk))
for j,nm in enumerate(NIB): print(nm,sorted(collections.Counter(r['nib'][j] for r in sk).items()))
