<?php
declare(strict_types=1);

$lane = (string)($argv[1] ?? '');
if (!in_array($lane, ['B', 'C'], true) || getenv('CDX_MOBILE_STAFF_INFO') !== 'META_ONLY_V1') {
    fwrite(STDERR, "DENIED\n");
    exit(78);
}
if ($lane === 'B') {
    $root = '/tmp/zhct-http-store-mysql.dQTTBP';
    $config = include $root . '/application/config/local/database.php';
    if (($config['database'] ?? '') !== 'zhct'
        || hash('sha256', (string)($config['hostname'] ?? '')) !== '47e8be48b0cfd56dcdb9d9d426e6637b245f340b4efad4cd2f084ec5851ecc8e') {
        throw new RuntimeException('B configuration drift');
    }
    $db = new PDO('mysql:host=' . $config['hostname'] . ';port=3306;dbname=zhct;charset=utf8',
        $config['username'], $config['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_LOWER]);
} else {
    if (getenv('POC_DIALECT') !== 'dm' || getenv('POC_HOST') !== '127.0.0.1'
        || getenv('POC_PORT') !== '5237' || getenv('POC_SCHEMA') !== 'ZHCT_APP'
        || getenv('POC_USER') !== 'ZHCT_APP') throw new RuntimeException('C configuration drift');
    $db = new PDO('dm:host=127.0.0.1;port=5237;schema=ZHCT_APP', getenv('POC_USER'), getenv('POC_PASSWORD'),
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_LOWER]);
    if ($db->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn() !== 'ZHCT_APP') {
        throw new RuntimeException('C schema drift');
    }
}
$out = ['lane' => $lane, 'tables' => [], 'triggers' => []];
foreach (['ydy_staff', 'ydy_user', 'ydy_user_code', 'ydy_staff_department'] as $table) {
    if ($lane === 'B') {
        $q = $db->prepare('SELECT COLUMN_NAME,DATA_TYPE,IS_NULLABLE,COLUMN_DEFAULT,EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION');
        $q->execute([$table]);
        $t = $db->prepare('SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?');
        $t->execute([$table]);
    } else {
        $q = $db->prepare('SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID');
        $q->execute([strtoupper($table)]);
        $t = $db->prepare('SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME=?');
        $t->execute([strtoupper($table)]);
    }
    $out['tables'][$table] = $q->fetchAll(PDO::FETCH_ASSOC);
    $out['triggers'][$table] = $t->fetchAll(PDO::FETCH_COLUMN);
}
echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), PHP_EOL;
