<?php
declare(strict_types=1);

// B/C SELECT-only source and export-queue gate. Never invokes export HTTP/cron.
$lane = (string)($argv[1] ?? '');
if (!in_array($lane, ['B', 'C'], true)) exit(78);
$root = $lane === 'B' ? '/tmp/zhct-http-store-mysql.dQTTBP'
    : '/tmp/zhct-dm-poc-20260928.fcpiiN/store';
$cfg = require $root . '/application/database.php';
$ac = $cfg['ai_zhct'] ?? [];
if (($cfg['prefix'] ?? '') !== 'ydy_' || ($ac['prefix'] ?? '') !== 'yoshop_') {
    throw new RuntimeException('database prefixes');
}
if ($lane === 'B') {
    $local = require '/workspace/zhct/zhctproject/store/application/config/local/database.php';
    foreach (['hostname', 'database', 'username', 'password'] as $key) {
        if (($cfg[$key] ?? null) !== ($local[$key] ?? null)
            || ($ac[$key] ?? null) !== ($local['ai_zhct'][$key] ?? null)) {
            throw new RuntimeException('not local MySQL');
        }
    }
    $storeDsn = 'mysql:host=' . $cfg['hostname'] . ';port=' . ($cfg['hostport'] ?? 3306)
        . ';dbname=' . $cfg['database'] . ';charset=utf8mb4';
    $aiDsn = 'mysql:host=' . $ac['hostname'] . ';port=' . ($ac['hostport'] ?? 3306)
        . ';dbname=' . $ac['database'] . ';charset=utf8mb4';
} else {
    foreach (['hostname' => 'POC_HOST', 'hostport' => 'POC_PORT',
        'database' => 'POC_SCHEMA', 'username' => 'POC_USER',
        'password' => 'POC_PASSWORD'] as $key => $env) {
        if ((string)($cfg[$key] ?? '') !== (string)getenv($env)) {
            throw new RuntimeException('Store worker config');
        }
    }
    foreach (['hostname' => 'POC_AI_HOST', 'hostport' => 'POC_AI_PORT',
        'database' => 'POC_AI_SCHEMA', 'username' => 'POC_AI_USER',
        'password' => 'POC_AI_PASSWORD'] as $key => $env) {
        if ((string)($ac[$key] ?? '') !== (string)getenv($env)) {
            throw new RuntimeException('AI worker config');
        }
    }
    if ((string)getenv('POC_HOST') !== '127.0.0.1'
        || (string)getenv('POC_PORT') !== '5237'
        || strtoupper((string)getenv('POC_SCHEMA')) !== 'ZHCT_APP'
        || (string)getenv('POC_AI_HOST') !== '127.0.0.1'
        || (string)getenv('POC_AI_PORT') !== '5238'
        || strtoupper((string)getenv('POC_AI_SCHEMA')) !== 'AIZHCT_APP') {
        throw new RuntimeException('not approved DM');
    }
    $storeDsn = 'dm:host=127.0.0.1;port=5237;schema=ZHCT_APP';
    $aiDsn = 'dm:host=127.0.0.1;port=5238;schema=AIZHCT_APP';
}
$opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_CASE => PDO::CASE_LOWER, PDO::ATTR_TIMEOUT => 5];
$store = new PDO($storeDsn, (string)$cfg['username'], (string)$cfg['password'], $opts);
$ai = new PDO($aiDsn, (string)$ac['username'], (string)$ac['password'], $opts);
$storeIdentity = $lane === 'B'
    ? (string)$store->query("SELECT CONCAT(@@server_uuid,'|',@@hostname,'|',@@port,'|',DATABASE())")->fetchColumn()
    : 'ZHCT_APP|5237|' . (string)$store->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn();
$aiIdentity = $lane === 'B'
    ? (string)$ai->query("SELECT CONCAT(@@server_uuid,'|',@@hostname,'|',@@port,'|',DATABASE())")->fetchColumn()
    : 'AIZHCT_APP|5238|' . (string)$ai->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn();
if (hash('sha256', $storeIdentity) !== ($lane === 'B'
        ? '003eb5aecf1cd4595b609c1f7f20b9ee325b578309fb9fe14fedaf77584fa401'
        : 'bc98485aed26beab348770a82ae38dbf922b04ab88a210cd7282c4caf0156194')
    || ($lane === 'B' && substr(hash('sha256', $aiIdentity), 0, 12) !== '210f925e093f')
    || ($lane === 'C' && $aiIdentity !== 'AIZHCT_APP|5238|AIZHCT_APP')) {
    throw new RuntimeException('two DB identities');
}
$sp = $lane === 'B' ? 'ydy_' : 'YDY_';
$ap = $lane === 'B' ? 'yoshop_' : 'YOSHOP_';
$query = static function (PDO $db, string $sql, array $args = []): array {
    if (!preg_match('/^SELECT\b/i', $sql)) throw new RuntimeException('SELECT only');
    $stmt = $db->prepare($sql);
    $stmt->execute($args);
    return array_map(static function (array $row): array {
        return array_change_key_case($row, CASE_LOWER);
    }, $stmt->fetchAll(PDO::FETCH_ASSOC));
};
$status = $query($store, 'SELECT STATUS,COUNT(*) AS N FROM ' . $sp
    . 'export_log WHERE STORE_ID=10001 AND TYPE=11 GROUP BY STATUS ORDER BY STATUS');
$owners = $query($store, 'SELECT COUNT(DISTINCT CREATE_BY_UUID) AS N FROM '
    . $sp . 'export_log WHERE STORE_ID=10001 AND TYPE=11'
    . ' AND CREATE_BY_UUID<>?', ['']);
$refunds = $query($ai, 'SELECT COUNT(*) AS N FROM ' . $ap
    . 'cash_refund_order WHERE STORE_ID=10001 AND IS_DELETE=0');
$exportAudit = $query($ai, 'SELECT COUNT(*) AS N FROM ' . $ap
    . 'cash_refund_order_log WHERE ACTION=?', ['export']);
$oss = $query($store, 'SELECT CONFIG_VALUE AS V FROM ' . $sp
    . 'config WHERE CONFIG_KEY=? AND STATUS=1', ['ossDisjunctor']);
$enabled = array_filter($oss, static function (array $row): bool {
    return (string)($row['v'] ?? '') !== '' && (string)$row['v'] !== '0';
});
echo json_encode(['lane' => $lane, 'two_db_identity_match' => true,
    'type11_export_status_counts' => $status,
    'type11_distinct_nonempty_actor_uuids' => (int)($owners[0]['n'] ?? 0),
    'natural_cash_refund_rows' => (int)($refunds[0]['n'] ?? 0),
    'ai_export_action_logs' => (int)($exportAudit[0]['n'] ?? 0),
    'active_oss_switch_rows' => count($oss),
    'active_oss_enabled_rows' => count($enabled)],
    JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE), PHP_EOL;
