import json,subprocess,re,time
T=[('ANA','anaheim-ducks'),('BOS','boston-bruins'),('BUF','buffalo-sabres'),('CGY','calgary-flames'),('CAR','carolina-hurricanes'),('CHI','chicago-blackhawks'),('COL','colorado-avalanche'),('CBJ','columbus-blue-jackets'),('DAL','dallas-stars'),('DET','detroit-red-wings'),('EDM','edmonton-oilers'),('FLA','florida-panthers'),('LAK','los-angeles-kings'),('MIN','minnesota-wild'),('MTL','montreal-canadiens'),('NSH','nashville-predators'),('NJD','new-jersey-devils'),('NYI','new-york-islanders'),('NYR','new-york-rangers'),('OTT','ottawa-senators'),('PHI','philadelphia-flyers'),('PIT','pittsburgh-penguins'),('SJS','san-jose-sharks'),('SEA','seattle-kraken'),('STL','st-louis-blues'),('TBL','tampa-bay-lightning'),('TOR','toronto-maple-leafs'),('UTA','utah-mammoth'),('VAN','vancouver-canucks'),('VGK','vegas-golden-knights'),('WSH','washington-capitals'),('WPG','winnipeg-jets')]
UA='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/130 Safari/537.36'
def get(u): return subprocess.run(['curl','-sL','-A',UA,u],capture_output=True,text=True).stdout
for ab,slug in T:
    r=get(f'https://api-web.nhle.com/v1/roster/{ab}/current'); open(f'roster_{ab}.json','w').write(r)
    s=get(f'https://www.dailyfaceoff.com/teams/{slug}/line-combinations')
    m=re.search(r'<script id="__NEXT_DATA__"[^>]*>(.*?)</script>',s,re.S)
    ok=False
    if m:
        d=json.loads(m.group(1)); out=[]
        def walk(o):
            if isinstance(o,dict):
                if 'positionIdentifier' in o and 'groupIdentifier' in o: out.append({k:o.get(k) for k in ('groupIdentifier','positionIdentifier','name','playerId','injuryStatus','jerseyNumber','updatedAt')})
                for v in o.values(): walk(v)
            elif isinstance(o,list):
                for v in o: walk(v)
        walk(d); json.dump(out,open(f'dfo_{ab}.json','w')); ok=len(out)
    try: n=sum(len(json.loads(r)[g]) for g in ('forwards','defensemen','goalies'))
    except Exception as e: n=str(e)[:40]
    print(ab,'roster',n,'dfo',ok,flush=True); time.sleep(1)
