import base64
import hashlib
import json
from remote import ROOT, run

names=['app/fight_runtime.py','app/scenario_parameters.py','app/secure_control.py','app/stream_settings.py',
 'app/stream_manager.py','app/secure_runtime.py','app/runtime_state.py','app/stream_config_store.py',
 'app/multi_provider_results.py','app/pose_config.py','app/contracts/frames.py',
 'app/contracts/visualization.py','app/event_cooldown.py','app/region_scenario.py','app/event_artifact_contract.py']
code=r'''
import base64,hashlib,json,os,urllib.request,yaml
from pathlib import Path
names=NAMES
files={n:base64.b64encode((Path('/opt/contextra')/n).read_bytes()).decode() for n in names}
configs={}
for key in ('CONTEXTRA_CONTROL_TEMPLATE_FILE','STREAMS_CONFIG_PATH','STREAMS_RUNTIME_PATH'):
 p=Path(os.environ[key]);data=json.loads(p.read_text()) if p.suffix=='.json' else yaml.safe_load(p.read_text())
 items=([data] if key=='CONTEXTRA_CONTROL_TEMPLATE_FILE' else data.get('added',data.get('streams',[])))
 configs[key]=dict(path=str(p),sha256=hashlib.sha256(p.read_bytes()).hexdigest(),keys=sorted(data),
  count=len(items),fight=[dict(id=x.get('camera_id',x.get('source_id','template')),fight=x.get('fight'),
  autostart=x.get('autostart',False)) for x in items])
t=Path(os.environ['CONTEXTRA_CONTROL_TOKEN_FILE']).read_text().strip()
q=urllib.request.Request('http://127.0.0.1:5000/internal/secure-control/runtime-status',headers={'Authorization':'Bearer '+t})
with urllib.request.urlopen(q,timeout=5) as response:status=json.load(response)
print(json.dumps(dict(files=files,configs=configs,runtime_counts=status['streamCounts'])))
'''.replace('NAMES',repr(names))
value=json.loads(run(['docker','exec','-i','contextra-ai2-analytics-1','python3','-B','-'],payload=code.encode()))
files=value.pop('files');hashes={}
for name,encoded in files.items():
 p=ROOT/'baseline'/name;p.parent.mkdir(parents=True,exist_ok=True);raw=base64.b64decode(encoded);p.write_bytes(raw)
 hashes[name]=hashlib.sha256(raw).hexdigest()
value['source_hashes']=hashes
(ROOT/'baseline.json').write_text(json.dumps(value,indent=2)+'\n')
print(json.dumps(dict(configs={k:dict(path=v['path'],count=v['count']) for k,v in value['configs'].items()},runtime_counts=value['runtime_counts'],files=len(files))))
