import re,glob,collections
EDM={0x39:'Ingram',0x35:'Jarry',0x30:'Pickard',0x34:'Dach',0x16:'Dickinson',0x29:'Draisaitl',0x10:'Frederic',0x19:'Henrique',0x53:'Howard',0x18:'Hyman',0x13:'Janmark',0x42:'Kapanen',0x20:'Lazar',0x97:'McDavid',0x93:'Nugent-Hopkins',0x92:'Podkolzin',0x28:'Roslovic',0x22:'Savoie',0x02:'Bouchard',0x14:'Ekholm',0x49:'Emberson',0x05:'Murphy',0x25:'Nurse',0x75:'Regula',0x24:'Stastney',0x96:'Walman'}
def s16(v): v=int(v)&0xffff; return v-65536 if v>=32768 else v
tot=collections.defaultdict(lambda: collections.Counter())
games=[]
for fn in sorted(glob.glob('edm_gm*.txt'),key=lambda f:int(re.findall(r'\d+',f)[0])):
    home=None; last=None; g=collections.Counter(); score=[0,0]
    for line in open(fn):
        m=re.match(r'(\d+) SHOT idx=(\d+) jer=(\w+) tm=(\w+) d3=(\d+) soft=(\d+) px=(\d+) py=(\d+) h=(\d+) a=(\d+)',line)
        if m:
            fr,idx,jer,tm,d3,soft,px,py,h,a=m.groups()
            if int(a)!=10: last=None; continue
            if home is None: home=int(h)
            if int(h)!=home: last=None; continue
            edm=int(tm,16)&0x40!=0
            last=dict(edm=edm,jer=int(jer,16),d3=int(d3)&0xffff,soft=int(soft),goal=False)
            if edm:
                name=EDM.get(last['jer'],'?%x'%last['jer']); far=last['d3']>=140
                tot[name]['skott']+=1; tot[name]['grönt' if far else 'nära']+=1
                if far and last['soft']: tot[name]['grönt_miss']+=1
                last['name']=name; last['far']=far
            continue
        m=re.match(r'(\d+) GOAL f000=(\d+) soft=(\d+) beda=(\d+) h=(\d+) a=(\d+)',line)
        if m:
            if int(m.group(6))!=10 or int(m.group(5))!=home: continue
            if last is not None and int(m.group(2))==last['d3'] and last['d3']>0:
                if last['edm']:
                    score[0]+=1; n=last['name']; tot[n]['mål']+=1; tot[n]['mål_grönt' if last['far'] else 'mål_nära']+=1
                else: score[1]+=1
            else:
                # goal not tied to logged shot (rebound/pickup lost): count by team unknown
                score.append('?')
            last=None
    games.append((fn,home,score))
for g in games: print(g)
print()
print(f"{'spelare':16s} skott  nära  grönt  (målvakt-miss)  mål  mål_nära  mål_grönt")
for n,c in sorted(tot.items(),key=lambda x:-x[1]['skott']):
    print(f"{n:16s} {c['skott']:5d} {c['nära']:5d} {c['grönt']:6d} {c['grönt_miss']:8d}      {c['mål']:5d} {c['mål_nära']:8d} {c['mål_grönt']:9d}")
