from net import *
import pandas as pd,re,html,sys
limit=int(sys.argv[1]) if len(sys.argv)>1 else 24
s=pd.read_parquet(R/'sample.parquet').head(limit);client=Client();folder=R/'store_summaries';folder.mkdir(exist_ok=True)
for i,row in enumerate(s.itertuples()):
    dest=folder/f'{row.appid}.json'
    if dest.exists():continue
    # Pilot established the page generally lacks a useful own-language summary
    # below 2000 reviews. Two direct summaries avoid a redundant page request.
    text=''
    if row.reviews>=2000 or limit<=24:
        raw=client.get(f'https://store.steampowered.com/app/{row.appid}/',{'l':'english','cc':'us'},'store_page',str(row.appid));text=raw.decode('utf-8')
    m=re.search(r'data-featuretarget="appreviews"\s+data-props="([^"]+)"',text)
    data={'appid':row.appid,'retrieved_at':utc(),'sample_order':row.sample_order}
    if m:
        props=json.loads(html.unescape(m[1]));assert props['appid']==row.appid
        options=props.get('summary_options',{});filt=props.get('filter_options',{})
        total=options.get('summaryGlobalNoOutliers');eng=options.get('summaryYourLanguage')
        data['props']=props
        if total is not None and eng is not None:
            data.update(source='store_props',total=total['nReviews'],positive=total['nReviewsPositive'],english=eng['nReviews'],english_positive=eng['nReviewsPositive'])
    if 'total' not in data:
        a=client.summary(row.appid,'all');e=client.summary(row.appid,'english')
        data.update(source='api_fallback',total=a['total_reviews'],positive=a['total_positive'],english=e['total_reviews'],english_positive=e['total_positive'],fallback_reason='missing store review props or required summaries')
    assert 0<=data['english']<=data['total'];assert data['english_positive']<=data['english'];assert data['positive']<=data['total']
    dump(dest,data)
    print(json.dumps({'done':i+1,'of':limit,'appid':row.appid,'source':data['source'],'total':data['total'],'english':data['english']},ensure_ascii=False),flush=True)
