<?php

declare(strict_types=1);

$journalPath = (string)($argv[1] ?? '');
if (count($argv) !== 2
    || (string)getenv('CDX_RPE_DIAG') !== 'READ_ONLY_C_RETENTION_V1'
    || !preg_match('~^/tmp/cdx-rpe-c-[a-f0-9]{12}/recovery\.json$~D', $journalPath)) {
    echo json_encode(['status'=>'default_deny','connected'=>false,'dml'=>false]), PHP_EOL;
    exit(78);
}
if (!is_file($journalPath) || is_link($journalPath) || is_link(dirname($journalPath))
    || (fileperms(dirname($journalPath))&0777)!==0700
    || (fileperms($journalPath)&0777)!==0600) {
    throw new RuntimeException('Private journal invalid');
}
$saved=json_decode((string)file_get_contents($journalPath),true);
if (!is_array($saved) || ($saved['lane']??null)!=='C'
    || ($saved['state']??null)!=='unexpected_reference_retain'
    || !preg_match('/^CDXRPE[A-F0-9]{12}$/D',(string)($saved['marker']??''))) {
    throw new RuntimeException('Journal ownership invalid');
}
$marker=(string)$saved['marker'];
$staffUuid=$marker.'S';
$rpeUuid=$marker.'R';
$db=new PDO('dm:host=127.0.0.1;port=5237;schema=ZHCT_APP',
    (string)getenv('POC_USER'),(string)getenv('POC_PASSWORD'),
    [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_CASE=>PDO::CASE_LOWER]);
if ((string)$db->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn()
    !=='ZHCT_APP') throw new RuntimeException('Schema drift');
$tables=static function(PDO $pdo,string $column):array{
    $stmt=$pdo->prepare('SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE COLUMN_NAME=? ORDER BY TABLE_NAME');
    $stmt->execute([$column]);
    return$stmt->fetchAll(PDO::FETCH_COLUMN);
};
$refs=static function(PDO $pdo,array $tables,string $column,string $value):array{
    $out=[];
    foreach($tables as$table){
        if(!preg_match('/^YDY_[A-Z0-9_]+$/D',(string)$table))throw new RuntimeException('Table invalid');
        $stmt=$pdo->prepare('SELECT COUNT(*) FROM '.$table.' WHERE '.$column.'=?');
        $stmt->execute([$value]);
        $count=(int)$stmt->fetchColumn();
        if($count)$out[(string)$table]=$count;
    }
    return$out;
};
$staffRefs=$refs($db,$tables($db,'STAFF_UUID'),'STAFF_UUID',$staffUuid);
$rpeRefs=$refs($db,$tables($db,'RPE_UUID'),'RPE_UUID',$rpeUuid);
$counts=[];
foreach([
    'YDY_USER'=>['UUID',$marker.'A'],
    'YDY_STAFF'=>['UUID',$staffUuid],
    'YDY_RPE'=>['UUID',$rpeUuid],
    'YDY_RPE_INFO'=>['RPE_UUID',$rpeUuid],
]as$table=>$spec){
    $stmt=$db->prepare('SELECT COUNT(*) FROM '.$table.' WHERE '.$spec[0].'=?');
    $stmt->execute([$spec[1]]);$counts[$table]=(int)$stmt->fetchColumn();
}
$stmt=$db->prepare('SELECT COUNT(*) FROM YDY_DATE_MENU WHERE STAFF_UUID=? AND MENU_DATE=?');
$stmt->execute([$staffUuid,'2001-01-02']);
echo json_encode(['status'=>'read_only_diagnosis','journal_state'=>$saved['state'],
    'fixture_counts'=>$counts,'staff_refs'=>$staffRefs,'rpe_refs'=>$rpeRefs,
    'date_menu_rows'=>(int)$stmt->fetchColumn(),'dml'=>false]),PHP_EOL;
