"""Deterministic redrive fixture. No broker, clock, permissions or network simulated."""
import csv,json
from pathlib import Path
P=Path(__file__).resolve().parent
messages=[{'event':'ok-1','kind':'valid'},{'event':'transient-1','kind':'transient'},{'event':'schema-1','kind':'new_schema'},{'event':'poison-1','kind':'malformed'}]
rows=[];summary={}
for version in ['unchanged','fixed_schema']:
 outcomes={}
 for m in messages:
  success=False
  for attempt in range(1,4):
   success=m['kind']=='valid' or (m['kind']=='transient' and attempt>=2) or (m['kind']=='new_schema' and version=='fixed_schema')
   rows.append({'consumer':version,'event':m['event'],'attempt':attempt,'result':'processed'if success else 'rejected'})
   if success:break
  outcomes[m['event']]='processed'if success else 'returned_to_dlq'
 summary[version]={'attempts':sum(r['consumer']==version for r in rows),'processed':sum(v=='processed'for v in outcomes.values()),'returnedToDlq':sum(v=='returned_to_dlq'for v in outcomes.values()),'outcomes':outcomes}
assert summary['unchanged']['attempts']==9 and summary['unchanged']['processed']==2
assert summary['fixed_schema']['attempts']==7 and summary['fixed_schema']['processed']==3
assert summary['fixed_schema']['outcomes']['poison-1']=='returned_to_dlq'
with (P/'trace.csv').open('w',newline='')as f:
 w=csv.DictWriter(f,fieldnames=rows[0]);w.writeheader();w.writerows(rows)
(P/'results.json').write_text(json.dumps({'maxAttemptsPerRun':3,'messages':messages,'runs':summary,'scope':'Assigned local consumer outcomes. No actual queue, delay, redrive service or durable side effect tested.'},indent=2)+'\n')
with (P/'redrive-review.csv').open('w',newline='')as f:
 w=csv.writer(f);w.writerow(['cohort','required_evidence','decision']);w.writerows([['new_schema','consumer accepts versioned payload without duplicate effect','pending'],['malformed','approved repair or explicit disposition','pending'],['transient','dependency health and bounded retry outcome','pending'],['already_applied','stable business identity and durable processing result','pending']])
print(json.dumps(summary,indent=2))
