<?php
declare(strict_types=1);
$case=json_decode((string)file_get_contents(__DIR__.'/private/current-case.json'),true);$auth=json_decode((string)file_get_contents(__DIR__.'/private/auth.json'),true);$path=parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);$raw=file_get_contents('php://input');$actual=json_decode($raw,true);
if(!$case||$case['path']!==$path||($_SERVER['HTTP_X_CDX_CASE']??'')!==$case['label']||($_SERVER['HTTP_TOKEN']??'')!==$auth['token']||$_SERVER['REQUEST_METHOD']!=='POST'||$actual!==$case['params']||strpos($_SERVER['CONTENT_TYPE']??'','application/json')!==0){http_response_code(403);exit;}
$wire='wire-'.$case['label'].'.json';if(is_file(__DIR__.'/private/'.$wire)||is_file(__DIR__.'/private/response-'.$case['label'].'.json')){http_response_code(409);exit;}
require __DIR__.'/common.php';require __DIR__.'/observe.php';require __DIR__.'/NativeGate.php';NFGate::$lane=$lane;NFGate::$case=$case;$before=$source();$lease=json_decode(file_get_contents(__DIR__.'/private/current-lease.json'),true);if($before!==$lease){http_response_code(409);exit;}$exact=$q('SELECT * FROM ydy_nutrition WHERE uuid=?',[$case['params']['uuid']]);if(count($exact)!==1)throw new RuntimeException('One exact own row');
$immutable=static function($name,$value){$f=__DIR__.'/private/'.$name;$h=fopen($f,'xb');if(!$h)throw new RuntimeException('Immutable record already exists');$j=json_encode($value,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION);if($j===false)throw new RuntimeException('Nonfinite evidence JSON');fwrite($h,$j);fclose($h);chmod($f,0600);};
$warnings=[];$previous=null;$previous=set_error_handler(static function($severity,$message,$file,$line)use(&$warnings,&$previous){$warnings[]=['severity'=>$severity,'message'=>$message,'file'=>$file,'line'=>$line];return is_callable($previous)?call_user_func($previous,$severity,$message,$file,$line):false;});
$started=microtime(true);$record=['case'=>$case,'raw_request_base64'=>base64_encode($raw),'before'=>$before,'before_exact_row'=>$exact[0]];ob_start();
try{$_SERVER['PATH_INFO']=$path;require __DIR__.'/app-init.php';$response=\think\App::run();$pre=['status'=>$response->getCode(),'headers'=>$response->getHeader(),'body'=>$response->getContent(),'body_sha256'=>hash('sha256',$response->getContent())];$immutable('response-'.$case['label'].'.json',$pre);$response->send();$record['response_saved_before_send']=true;}
catch(Throwable $e){$record['business_or_send_error']=['class'=>get_class($e),'message'=>$e->getMessage()];}
$record['body']=(string)ob_get_contents();$record['status']=http_response_code();$record['headers']=headers_list();ob_end_flush();flush();
$record['native']=NFGate::$journal;$record['DML_attempts']=NFGate::$dml;$record['PHP_source_warnings']=$warnings;$record['last_error']=error_get_last();$record['duration']=microtime(true)-$started;$record['included_files']=$included();
try{$record['after']=$source();$record['protected_equal']=$protected($before,$record['after'],$case['params']['uuid']);$record['physical']=$physical($case['params']['uuid']);$record['oracle']=$GLOBALS['NF_ORACLE'];}
catch(Throwable $e){$record['oracle_error']=['class'=>get_class($e),'message'=>$e->getMessage()];$record['oracle']=$GLOBALS['NF_ORACLE'];}
restore_error_handler();$immutable($wire,$record);
