<?php
declare(strict_types=1);
require __DIR__.'/ConfigWriteAudit.php';$runtime=tempnam(sys_get_temp_dir(),'cdx-config-audit-');unlink($runtime);mkdir($runtime,0700);
file_put_contents($runtime.'/private-owned-map.json',json_encode(['rows'=>['yoshop_user_grade'=>['701'=>2147000721],'yoshop_recharge_plan'=>['702'=>2147000721,'703'=>2147000722]]]));
$audit=new ConfigWriteAudit($runtime,2147000721);$tests=[
    ['grade-values-own',"INSERT INTO yoshop_user_grade (name,store_id) VALUES ('own',2147000721)",true],
    ['plan-set-own',"INSERT INTO `yoshop_recharge_plan` SET plan_name='own',store_id=2147000721",true],
    ['grade-exact-scope',"UPDATE yoshop_user_grade SET weight=3 WHERE yoshop_user_grade.store_id='2147000721' AND grade_id=701",true],
    ['plan-pk-first',"UPDATE yoshop_recharge_plan SET money='13.675' WHERE plan_id=702 AND store_id=2147000721",true],
    ['foreign-insert',"INSERT INTO yoshop_user_grade (store_id) VALUES (10001)",false],
    ['missing-insert-owner',"INSERT INTO yoshop_user_grade (name) VALUES ('own')",false],
    ['foreign-schema',"INSERT INTO other.yoshop_user_grade (store_id) VALUES (2147000721)",false],
    ['fraction-owner',"INSERT INTO yoshop_user_grade (store_id) VALUES (2147000721.1)",false],
    ['foreign-update-store',"UPDATE yoshop_user_grade SET weight=3 WHERE store_id=10001 AND grade_id=701",false],
    ['foreign-update-pk',"UPDATE yoshop_user_grade SET weight=3 WHERE store_id=2147000721 AND grade_id=704",false],
    ['other-module-owned-id',"UPDATE yoshop_recharge_plan SET money=1 WHERE store_id=2147000721 AND plan_id=703",false],
    ['no-store-scope',"UPDATE yoshop_user_grade SET weight=3 WHERE grade_id=701",false],
    ['or-expansion',"UPDATE yoshop_user_grade SET weight=3 WHERE store_id=2147000721 AND grade_id=701 OR grade_id=704",false],
    ['rekey',"UPDATE yoshop_user_grade SET grade_id=704 WHERE store_id=2147000721 AND grade_id=701",false],
    ['retenant',"UPDATE yoshop_user_grade SET store_id=10001 WHERE store_id=2147000721 AND grade_id=701",false],
    ['write-user-forbidden',"UPDATE yoshop_user SET grade_id=701 WHERE store_id=2147000721 AND user_id=702",false],
    ['delete-forbidden',"DELETE FROM yoshop_user_grade WHERE grade_id=701",false],
    ['multi-statement',"UPDATE yoshop_user_grade SET weight=3 WHERE store_id=2147000721 AND grade_id=701;DELETE FROM yoshop_user",false],
];$out=[];
foreach($tests as [$name,$sql,$expected]){$accepted=true;try{$audit->observe($sql);}catch(RuntimeException $e){$accepted=false;}if($accepted!==$expected)throw new RuntimeException('Missed config audit mutation '.$name);$out[]=['case'=>$name,'accepted'=>$accepted,'expected'=>$expected];}
echo json_encode(['assertions'=>count($out),'all_passed'=>true,'database_called'=>false,'cases'=>$out],JSON_PRETTY_PRINT),"\n";
foreach(['private-owned-map.json','private-write-sql.jsonl','write-audit.jsonl'] as $name)unlink($runtime.'/'.$name);rmdir($runtime);
