"""Bounded feasibility probe authorized for this career-history follow-up.

Independent scope: bulk collection remains disabled in the research-root policy.
Ten fixed public Steam metadata requests, no retries, stop on errors/429, no media.
"""
from pathlib import Path
import json,time,datetime as dt
import requests
R=Path(__file__).resolve().parent
TASKS=[('byte_hist','https://store.steampowered.com/appreviewhistogram/760330',{'l':'english'}),
       ('snkrx_hist','https://store.steampowered.com/appreviewhistogram/915310',{'l':'english'}),
       ('byte_summary','https://store.steampowered.com/appreviews/760330',{'json':1,'filter':'recent','language':'all','purchase_type':'steam','review_type':'all','num_per_page':1,'filter_offtopic_activity':1}),
       ('snkrx_summary','https://store.steampowered.com/appreviews/915310',{'json':1,'filter':'recent','language':'all','purchase_type':'steam','review_type':'all','num_per_page':1,'filter_offtopic_activity':1}),
       ('byte_all_summary','https://store.steampowered.com/appreviews/760330',{'json':1,'filter':'recent','language':'all','purchase_type':'all','review_type':'all','num_per_page':1,'filter_offtopic_activity':1}),
       ('snkrx_all_summary','https://store.steampowered.com/appreviews/915310',{'json':1,'filter':'recent','language':'all','purchase_type':'all','review_type':'all','num_per_page':1,'filter_offtopic_activity':1}),
       ('byte_hist_steam','https://store.steampowered.com/appreviewhistogram/760330',{'l':'english','language':'all','purchase_type':'steam','filter_offtopic_activity':1}),
       ('snkrx_hist_steam','https://store.steampowered.com/appreviewhistogram/915310',{'l':'english','language':'all','purchase_type':'steam','filter_offtopic_activity':1}),
       ('byte_unfiltered_summary','https://store.steampowered.com/appreviews/760330',{'json':1,'filter':'recent','language':'all','purchase_type':'all','review_type':'all','num_per_page':1,'filter_offtopic_activity':0}),
       ('snkrx_unfiltered_summary','https://store.steampowered.com/appreviews/915310',{'json':1,'filter':'recent','language':'all','purchase_type':'all','review_type':'all','num_per_page':1,'filter_offtopic_activity':0})]
policy={'bulk_network_paused':True,'scope':'Ten fixed feasibility requests','max_requests':10,'min_interval_seconds':2,'retries':0,'max_response_bytes':2000000,'active':True}
(R/'probe_policy.json').write_text(json.dumps(policy,indent=2))
try:
 for i,(name,url,params) in enumerate(TASKS):
  dest=R/(name+'.json')
  if dest.exists():continue
  if i:time.sleep(2)
  r=requests.get(url,params=params,timeout=(10,30),headers={'User-Agent':'SteamCatalogResearch/0.2 (bounded public review history audit)'})
  r.raise_for_status()
  assert len(r.content)<=policy['max_response_bytes']
  data=r.json()
  if 'reviews' in data:
   data['reviews']=[{k:v.get(k) for k in ['recommendationid','timestamp_created','timestamp_updated','voted_up','steam_purchase']} for v in data['reviews']]
  record={'retrieved_at':dt.datetime.now(dt.timezone.utc).isoformat(),'url':r.url,'status':r.status_code,'response':data}
  dest.write_text(json.dumps(record,indent=2,ensure_ascii=False))
  print(name,'bytes',len(r.content),'keys',list(data),flush=True)
  print(json.dumps(data,ensure_ascii=False)[:1800],flush=True)
finally:
 policy['active']=False
 (R/'probe_policy.json').write_text(json.dumps(policy,indent=2))
