#!/usr/bin/env python3
"""Native far-wing free-space, marking, pass-corridor and control guards."""
from pathlib import Path
import sys,json
import argparse
ap=argparse.ArgumentParser(description=__doc__);ap.add_argument('rom',type=Path);ap.add_argument('output',type=Path);ap.add_argument('--baseline',type=Path,required=True);ap.add_argument('--backdoor',action='store_true');args=ap.parse_args();here=Path(__file__).resolve().parent;args.output.mkdir(parents=True,exist_ok=True)
sys.argv=['probe',str(args.rom),str(args.output),'--baseline',str(args.baseline)]
text=(here/'verify_ai_attack.py').read_text().split('\ncases=[]')[0];ns={'__file__':str(here/'verify_ai_attack.py')};exec(compile(text,'existing native attack probe','exec'),ns);run=ns['run'];rows=[]
for team in [0,1]:
 for direction in [-1,1]:
  for sign in [-1,1]:
   role=3 if direction*sign==1 else 5;blank=[dict(x=140,y=0,role=-1) for _ in range(5)];keeper=dict(x=20*sign,y=246,role=0)
   for kind in ['open','marked','blocked']:
    opponents=blank+[keeper]
    if kind=='marked':opponents[0]=dict(x=(-48 if args.backdoor else -44)*sign,y=244 if args.backdoor else 232)
    if kind=='blocked':opponents[0]=dict(x=33*sign,y=232 if args.backdoor else 226)
    spec=dict(team=team,direction=direction,role=role,px=110*sign,depth=220,opponents=opponents)
    old=run(args.baseline,f'old-{team}-{direction}-{sign}-{kind}',spec,'support');new=run(args.rom,f'new-{team}-{direction}-{sign}-{kind}',spec,'support')
    expected=(((-48 if args.backdoor else -44)*sign,(244 if args.backdoor else 232)*direction) if kind=='open' else (-28*sign,(220 if args.backdoor else 208)*direction) if kind=='marked' else (old['x'],old['y']))
    assert (new['x'],new['y'])==expected,(spec,kind,old,new,expected);
    if kind=='marked':assert (new['x']+(48 if args.backdoor else 44)*sign)**2+(new['y']-(244 if args.backdoor else 232)*direction)**2>=676,('receiver still marked',new)
    rows.append(dict(spec=spec,kind=kind,baseline=old,candidate=new))
for key,value in [('depth',159),('depth',237),('whistle',1),('view',128),('penalty',4),('shootout',1),('difficulty',0),('difficulty',2),('flags',8),('unavailable',4)]:
 spec=dict(team=0,direction=1,role=3,px=110,opponents=[dict(x=140,y=0,role=-1) for _ in range(5)]+[dict(x=20,y=246,role=0)],**{key:value});old=run(args.baseline,'old-guard-'+key+str(value),spec,'support');new=run(args.rom,'new-guard-'+key+str(value),spec,'support');assert new==old,(spec,old,new);rows.append(dict(spec=spec,kind='guard',baseline=old,candidate=new))
(args.output/'results.json').write_text(json.dumps(rows,indent=2)+'\n');print('PASS',len(rows),'native candidate spots, markings, blocked lanes, both ends/teams and guards')
