import json
from pathlib import Path
ROOT=Path(__file__).resolve().parent
MODEL='app/terminal/model/meal/Meal.php';SERVICE='app/terminal/service/meal/Meal.php'
MODEL_SHA='84cf5e96b8d968e7bb2c59927688d999400df280fbba329556b17b8cad3cb1e9'
SERVICE_SHA='d818cffc6ace67ba3fcb108b8da3d4ff760574b9c38a84e5e71312edc77ca632'
def eq(a,b):
    if type(a) is not type(b):return False
    if isinstance(a,dict):return a.keys()==b.keys() and all(eq(a[k],b[k]) for k in a)
    if isinstance(a,list):return len(a)==len(b) and all(eq(x,y) for x,y in zip(a,b))
    return a==b
def verify(e):
    lane=e['lane'];assert e['path']=='GET /terminal/meal.Meal/infos'
    assert e['business_DML']==0 and e['original_rows_unchanged'] and e['tokens_cache_reclaimed']
    assert all(x['tenant_scope_verified'] and x['operation'] not in ['insert','update','delete','merge'] for x in e['sql_audit'])
    assert len(e['cases'])==(2 if lane=='B' else 3) and not e['B_final_v2_native_replayed']
    requests=assertions=failures=0
    for c in e['cases']:
        assert c['http_status']==200 and c['business_status']==200 and c['original_unchanged'] and c['rows']>0
        assert c['actual_contract']['type']==c['expected_contract']['type']=='object'
        failing=c['phase']=='original' and lane=='C'
        assert c['complete_original_equal'] is not failing
        if failing:assert len(c['difference'])==267 and c['native_exit']!=0
        else:assert c['native_exit']==0 and eq(c['actual_contract'],c['expected_contract'])
        for r in c['native_stats']:
            st=r['stats'];assert st['requests']['total']==1 and st['assertions']['total']==4
            assert st['assertions']['failed']==(1 if failing else 0)
            requests+=1;assertions+=4;failures+=st['assertions']['failed']
    final=e['final_boundary']['reflection'];assert final[MODEL]['sha256']==MODEL_SHA and final[SERVICE]['sha256']==SERVICE_SHA
    assert all(x['actual_private_path'] for x in final.values())
    if lane=='B':assert e['mysql_complete_body_invariance']['complete_body_unchanged_except_top_trace'] and e['dependency_C_seven']==[]
    else:
        assert len(e['dependency_C_seven'])==7
        for c in e['dependency_C_seven']:assert c['http_status']==200 and c['complete_original_equal'] and eq(c['actual_contract'],c['expected_contract'])
        for r in e['dependency_native_stats']:
            st=r['stats'];assert st['requests']['total']==7 and st['assertions']['total']==28 and st['assertions']['failed']==0 and r['failures']==0
            requests+=7;assertions+=28
    return requests,assertions,failures
def main():
    results=[verify(json.loads((ROOT/f'infos-evidence-{k}.json').read_text())) for k in ['B','C']]
    out={'status':'PASS','new_unique_GET_methods':1,'infos_native_HTTP':5,'existing_Analysis_dependency_C_HTTP':7,'actual_native_HTTP_total':sum(r[0] for r in results),'historical_assertions':sum(r[1] for r in results),'historical_expected_C_failure_assertions':sum(r[2] for r in results),'DML':0,'B_original_complete_body_unchanged':True,'B_v2_native_not_repeated':True,'C_final_v2_full_original_and_dependency_seven_passed':True,'cross_lane_natural_values_forced_equal':False,'final_model_sha256':MODEL_SHA,'final_service_sha256':SERVICE_SHA,'scope':'Partial natural ready sample; no empty/loading/permissions/concurrency/full-system claim'}
    (ROOT/'comparison.json').write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');print(json.dumps(out,ensure_ascii=False))
if __name__=='__main__':main()
