#!/usr/bin/env python3
import collections,hashlib,json,pathlib
import verify_read7 as verify
here=pathlib.Path(__file__).resolve().parent;b=here/'private-evidence/B';c=here/'private-evidence/C'
verify.manifest(b);verify.manifest(c);result=verify.verify(b,c)
methods=[('POST','/p/cater/search','partial'),('POST','/p/bill/dishesAll','partial'),('POST','/api/card/cardList','partial'),('POST','/api/card/logList','partial'),('POST','/p/Restaurant/restaurant_list','partial'),('POST','/p/Restaurant/restaurant_read','partial'),('POST','/p/Restaurant/mealTimeCount','limited')]
result['methods']=[{'method':m,'path':p,'status':s} for m,p,s in methods];lanes={}
for lane,root in [('B',b),('C',c)]:
 stages={}
 for prefix in ['','dining-','restaurant-','card-green-','restaurant-green-']:
  file=root/(prefix+'report-private.json')
  if file.exists():
   report=json.loads(file.read_bytes());stages[prefix or 'first4-original']={k:v for k,v in report.items() if k!='events'}
 events=[json.loads(x) for x in (root/'queries.jsonl').read_text().splitlines()];warnings=[x for x in events if x['kind']=='query_observed' and x.get('fingerprint_lexical_warning')]
 lanes[lane]={'stages':stages,'native_cli':verify.read(root,'native-stats-private.json'),'cleanup':verify.read(root,'cleanup-private.json'),'evidence_files':len(verify.read(root,'EVIDENCE_MANIFEST.json')),'evidence_manifest_sha256':hashlib.sha256((root/'EVIDENCE_MANIFEST.json').read_bytes()).hexdigest(),'sql_observer':{'operations_including_metadata':dict(collections.Counter(x['operation'] for x in events if x['kind']=='query_observed')),'lexical_warnings':len(warnings),'warning_fingerprints':sorted(set(x['fingerprint'] for x in warnings)),'global_fingerprint_gate_closed':False,'metadata_not_counted_as_business':True}}
result['lanes']=lanes;result['business_tdd']={'Card':json.loads((here/'CARD_TDD.json').read_bytes()),'Restaurant':json.loads((here/'RESTAURANT_TDD.json').read_bytes())};result['root_column_verification']=verify.read(c,'root-column-final.json');result['natural_values_or_credentials_public']=False
(here/'results.json').write_text(json.dumps(result,ensure_ascii=False,indent=2)+'\n')
manifest={p.name:hashlib.sha256(p.read_bytes()).hexdigest() for p in sorted(here.iterdir()) if p.is_file() and p.name!='MANIFEST.json' and p.suffix in ['.md','.php','.py','.txt','.json','.patch'] and not p.name.endswith('-private.json')}
(here/'MANIFEST.json').write_text(json.dumps(manifest,indent=2)+'\n')
print(json.dumps({'status':'pass','partial':6,'limited':1,'business_http':{'B':13,'C':17},'child_DML_DDL':0,'root_DDL':3,'sql_warnings':{k:v['sql_observer']['lexical_warnings'] for k,v in lanes.items()}},ensure_ascii=False))
