<?php
declare(strict_types=1);

// Counts only: retained synthetic-audit users, no token, HTTP, or DML.
if (getenv('CDX_READ8_INVENTORY') !== 'APPROVED_AUDIT_COUNTS_V1') {
    echo json_encode(['status' => 'default_deny', 'db' => 0, 'http' => 0, 'dml' => 0]), PHP_EOL;
    exit(78);
}
$target = (string)getenv('CDX_READ8_TARGET');
if (!in_array($target, ['A', 'B', 'C'], true)) {
    throw new RuntimeException('Target must be A, B, or C');
}
$expectedSha = (string)getenv('CDX_READ8_SHA');
if (strlen($expectedSha) !== 64 || !hash_equals($expectedSha, (string)hash_file('sha256', __FILE__))) {
    throw new RuntimeException('Script SHA mismatch');
}
putenv('CDX_READ2_TARGET=' . $target);
putenv('CDX_READ2_SCHEMA_PREFLIGHT=1');
require $target === 'C'
    ? '/tmp/zhct-ai-read2-VgKO4CDY/read2_schema_preflight.php'
    : __DIR__ . '/../parallel-ai-next-read-safe4/read2_schema_preflight.php';
$ai->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
$prefix = $dialect === 'dm' ? 'YOSHOP_' : 'yoshop_';
$table = static function (string $name) use ($prefix, $dialect): string {
    return $prefix . ($dialect === 'dm' ? $name : strtolower($name));
};
$markers = [
    'A' => ['mobile' => 'CDXPARMOB426CA4B0', 'cash' => 'CDXPAY112FC189', 'subsidy' => 'CDXPAY7E0B0221'],
    'B' => ['mobile' => 'CDXPARMOB838A9419', 'cash' => 'CDXPAY72BEB125', 'subsidy' => 'CDXPAYD914599B'],
    'C' => ['mobile' => 'CDXPARMOB9411C2CB', 'cash' => 'CDXPAY661BEE6B', 'subsidy' => 'CDXPAY03721E84'],
];
$out = [];
$moneyMetaSql = $dialect === 'dm'
    ? "SELECT COLUMN_NAME,DATA_TYPE,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLUMNS"
        . " WHERE TABLE_NAME='YOSHOP_USER_BALANCE_LOG' AND COLUMN_NAME IN ('MONEY','BALANCE_AFTER')"
    : "SELECT COLUMN_NAME,DATA_TYPE,NUMERIC_PRECISION AS DATA_PRECISION,NUMERIC_SCALE AS DATA_SCALE"
        . " FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE()"
        . " AND TABLE_NAME='yoshop_user_balance_log' AND COLUMN_NAME IN ('money','balance_after')";
$moneyMeta = $ai->query($moneyMetaSql)->fetchAll(PDO::FETCH_ASSOC);
$rechargeMetaSql = $dialect === 'dm'
    ? "SELECT COLUMN_NAME,DATA_TYPE,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLUMNS"
        . " WHERE TABLE_NAME='YOSHOP_RECHARGE_ORDER' AND DATA_TYPE='DECIMAL'"
    : "SELECT COLUMN_NAME,DATA_TYPE,NUMERIC_PRECISION AS DATA_PRECISION,NUMERIC_SCALE AS DATA_SCALE"
        . " FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE()"
        . " AND TABLE_NAME='yoshop_recharge_order' AND DATA_TYPE='decimal'";
$rechargeMeta = $ai->query($rechargeMetaSql)->fetchAll(PDO::FETCH_ASSOC);
$payment = $ai->query('SELECT COUNT(*) AS TOTAL_ROWS,'
    . " SUM(CASE WHEN IS_ENABLE=1 AND METHOD<>'balance' THEN 1 ELSE 0 END) AS ENABLED_NON_BALANCE"
    . ' FROM ' . $table('PAYMENT') . " WHERE STORE_ID=10001 AND CLIENT='MP-WEIXIN'")
    ->fetch(PDO::FETCH_ASSOC);
$paymentGroups = $ai->query('SELECT CLIENT,'
    . " SUM(CASE WHEN IS_ENABLE=1 AND METHOD<>'balance' THEN 1 ELSE 0 END) AS ENABLED_NON_BALANCE"
    . ' FROM ' . $table('PAYMENT') . ' WHERE STORE_ID=10001 GROUP BY CLIENT')
    ->fetchAll(PDO::FETCH_ASSOC);
$clientCounts = [];
foreach ($paymentGroups as $group) {
    $client = (string)($group['CLIENT'] ?? $group['client'] ?? '');
    if ($client !== '') $clientCounts[$client] = (int)($group['ENABLED_NON_BALANCE'] ?? $group['enabled_non_balance'] ?? 0);
}
foreach ($markers[$target] as $role => $marker) {
    $stmt = $ai->prepare('SELECT USER_ID FROM ' . $table('USER') . ' WHERE NICK_NAME=? AND STORE_ID=10001 AND IS_DELETE=0');
    $stmt->execute([$marker]);
    $users = $stmt->fetchAll(PDO::FETCH_COLUMN);
    if (count($users) !== 1) {
        $out[$role] = ['owned_audit_user' => false, 'matching_user_count' => count($users)];
        continue;
    }
    $userId = (int)$users[0];
    $counts = [];
    foreach (['USER_BALANCE_LOG', 'USER_SUBSIDY_LOG', 'RECHARGE_ORDER', 'USER_WEIGHT_STATUS'] as $name) {
        $sql = 'SELECT COUNT(*) FROM ' . $table($name) . ' WHERE USER_ID=? AND STORE_ID=10001';
        try {
            $row = $ai->prepare($sql);
            $row->execute([$userId]);
            $counts[strtolower($name)] = (int)$row->fetchColumn();
        } catch (PDOException $error) {
            $counts[strtolower($name)] = 'missing_or_unreadable:' . (string)$error->getCode();
        }
    }
    $out[$role] = ['owned_audit_user' => true, 'source_count_by_table' => $counts];
}
echo json_encode(['status' => 'audit_counts_readonly', 'target' => $target,
    'dialect' => $dialect, 'roles' => $out,
    'balance_log_money_metadata' => $moneyMeta,
    'recharge_order_decimal_metadata' => $rechargeMeta,
    'mp_weixin_payment_rows' => [
        'all' => (int)($payment['TOTAL_ROWS'] ?? $payment['total_rows'] ?? 0),
        'enabled_non_balance' => (int)($payment['ENABLED_NON_BALANCE'] ?? $payment['enabled_non_balance'] ?? 0),
    ],
    'enabled_non_balance_by_client' => $clientCounts,
    'http' => 0, 'dml' => 0],
    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), PHP_EOL;
