import csv
import json
from pathlib import Path

R=Path(__file__).parent
plan=json.loads((R/'plan.json').read_text());final=json.loads((R/'final-reconciled.json').read_text())
rows=[]
for c in plan['channels']:
    started=c['original'] or (R/(c['stream_id']+'-started.json')).exists()
    status='existing_running' if c['original'] else ('started_then_removed' if started else ('settings_timeout_then_removed' if c['group']==4 and c['copy']==1 else 'not_registered'))
    rows.append(dict(channel=f"G{c['group']}-{c['copy']}",start_result=status,result_fps='NOT_MEASURED',redis_fps='NOT_MEASURED',
                     queue='NOT_MEASURED',replaced='NOT_MEASURED',frame_error='NOT_MEASURED',
                     cleanup='preserved' if c['original'] else ('GET500_then_verified_stopped_and_removed' if c['group']==1 and c['copy']==3 else ('removed' if started or c['copy']==1 else 'not_created'))))
with (R/'summary.csv').open('w') as f:
    w=csv.DictWriter(f,fieldnames=list(rows[0]));w.writeheader();w.writerows(rows)
v=dict(outcome='16_CHANNEL_WINDOW_NOT_EXECUTED',peak_verified_running=12,temporary_started=9,temporary_registered=10,
       measurement_seconds=0,rows=rows,blocking_boundary='PATCH settings response timeout5s before13th channel Start',
       cleanup_observation='Stop202; GET status500 collector None; same-generation cleanup subsequently confirmed',
       final_active_workers=final['publisher']['metrics']['workers'],final_registered_publisher_channels=final['publisher']['metrics']['channels'],
       temporary_api_registrations_remaining=0,original_runs_and_settings_preserved=True,
       memory_before_mib=plan['resources']['memory']/1024**2,memory_after_mib=final['resources']['memory']/1024**2,
       host_available_after_gib=final['resources']['available']/1024**3,
       gpu_before=plan['resources']['gpu'],gpu_after=final['resources']['gpu'])
(R/'summary.json').write_text(json.dumps(v,indent=2))
print(json.dumps({k:v for k,v in v.items() if k!='rows'},indent=2))
