<?php
declare(strict_types=1);
ini_set('display_errors','0');ini_set('log_errors','0');$stage='start';
try{
    require __DIR__.'/common.php';$lane=getenv('PILOT_LANE');if(!in_array($lane,['B','C'],true)){throw new RuntimeException('Lane gate');}$dm=$lane==='C';$ai=cpPdo();$store=cpPdo(true);$actors=cpActors($ai,$store,$lane);$before=cpTableSnapshot($ai);
    $out=['lane'=>$lane,'scope'=>'readonly_preflight','actor_unique'=>true,'store_mapping_unique'=>true,'actors'=>$actors,'before'=>$before,'columns'=>[],'references'=>[],'actor_claims'=>count(cpRows($ai,'SELECT user_coupon_id FROM yoshop_user_coupon WHERE user_id=? AND store_id=10001',[$actors['actor_id']]))];
    foreach(['coupon','user_coupon'] as $table){$physical=$dm?strtoupper('yoshop_'.$table):'yoshop_'.$table;
        $sql=$dm?"SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME='".$physical."' ORDER BY COLUMN_ID":"SHOW COLUMNS FROM ".$physical;
        $out['columns'][$table]=cpRows($ai,$sql);
        $fk=cpRows($ai,$dm?"SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='".$physical."' AND CONSTRAINT_TYPE='R'":"SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='".$physical."' AND REFERENCED_TABLE_NAME IS NOT NULL");
        $tr=cpRows($ai,$dm?"SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='".$physical."'":"SHOW TRIGGERS WHERE `Table`='".$physical."'");$out['references'][$table]=['foreign_keys'=>count($fk),'triggers'=>count($tr)];
        if($fk||$tr){throw new RuntimeException('Unapproved write side-effect reference');}
    }
    $marker='CDXCR10A6C8D219F037';if(cpRows($ai,'SELECT coupon_id FROM yoshop_coupon WHERE name=?',[$marker])){throw new RuntimeException('Marker collision');}
    $out['business_dml']=0;$out['ddl']=0;$out['status']='pass';
    file_put_contents(getenv('PILOT_RUNTIME').'/preflight-private.json',json_encode($out,JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION|JSON_THROW_ON_ERROR));chmod(getenv('PILOT_RUNTIME').'/preflight-private.json',0600);
    echo json_encode(['status'=>'pass','lane'=>$lane,'coupon_rows'=>$before['coupon']['rows'],'user_coupon_rows'=>$before['user_coupon']['rows'],'actor_claims'=>$out['actor_claims'],'columns'=>array_map('count',$out['columns']),'foreign_keys_triggers'=>$out['references'],'business_dml'=>0]),PHP_EOL;
}catch(Throwable $e){echo json_encode(['status'=>'fail','stage'=>$stage,'class'=>get_class($e),'file'=>basename($e->getFile()),'line'=>$e->getLine(),'code'=>(string)$e->getCode()]),PHP_EOL;exit(1);}
