<?php
declare(strict_types=1);
date_default_timezone_set('Asia/Shanghai');require __DIR__.'/oracle.php';require __DIR__.'/cases.php';
$db=smPdo();$sha=catSha();catActor($db);$runtime=getenv('SM7_RUNTIME');
if(is_file($runtime.'/green-spec-private.json')){throw new RuntimeException('No successful readonly replay');}
define('APP_PATH',getenv('SM7_ROOT').'/application/');require APP_PATH.'common/enum/EnumBasics.php';require APP_PATH.'common/enum/order/OrderSource.php';require APP_PATH.'base/Security.php';
$actor=smLoad('actor-private.json');$boundary=smLoad('boundary-private.json');$token=\app\base\Security::encrypt(implode("\t",[(string)$actor['id'],$actor['uuid'],$actor['marker'],'0','','',$actor['marker']]));
$wanted=['DISHES_1','ORDERS_SOURCE','ORDERS_EMPTY','FACE_1','FACE_2','CARD_SOURCE'];$items=[];$spec=[];
foreach(catCases(smLoad('candidates-private.json')['candidates']) as $case){if(!in_array($case['name'],$wanted,true)){continue;}$proof=catSnapshot($db,$case,$boundary);$request=['method'=>$case['method'],'url'=>getenv('SM7_BASE').$case['path'],'header'=>[['key'=>'token','value'=>$token],['key'=>'Content-Type','value'=>'application/x-www-form-urlencoded'],['key'=>'X-Pilot-Scenario','value'=>'PILOT_CAT_GREEN_'.$case['name']]]];
 if($case['method']==='GET'){$request['url'].='?'.http_build_query($case['params']);}else{$body=[];foreach($case['params'] as $k=>$v){$body[]=['key'=>$k,'value'=>(string)$v,'type'=>'text'];}$request['body']=['mode'=>'urlencoded','urlencoded'=>$body];}
 $expected=json_encode($proof['body'],JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR);$items[]=['id'=>'catalog-green-'.$case['name'],'name'=>$case['name'],'type'=>'http','metaInfo'=>['type'=>'HTTP'],'request'=>$request,'event'=>[['listen'=>'test','script'=>['type'=>'text/javascript','exec'=>["pm.test('HTTP 200',()=>pm.response.to.have.status(200));",'const expected='.$expected.';',"pm.test('independent original-table complete JSON contract',()=>pm.expect(pm.response.json()).to.deep.equal(expected));"]]]]];$spec[]=$case+['before'=>$proof];
}
if(count($spec)!==count($wanted)){throw new RuntimeException('Missing necessary green case');}
smSave('green-spec-private.json',$spec);smSave('green-collection-private.json',['apifoxCli'=>'2.2.8','info'=>['name'=>'Frozen necessary read-contract regression'],'item'=>[['name'=>'Only repaired methods plus two readonly controls','item'=>$items]]]);smSave('green-prepared-private.json',['lane'=>getenv('SM7_LANE'),'source_sha256'=>$sha,'prepared_cases'=>count($spec),'new_fixture_dml'=>0,'ddl'=>0]);
echo json_encode(['lane'=>getenv('SM7_LANE'),'prepared_cases'=>count($spec),'new_fixture_dml'=>0,'ddl'=>0]),PHP_EOL;
