<?php

declare(strict_types=1);

$root = '/tmp/cdx-prepay-code-scan-20261012-B-store';
$old = json_decode((string)file_get_contents($root . '/refund10001-receipt.json'), true);
if (!is_array($old) || ($old['marker'] ?? '') !== 'CDXPPREF12B01-O1'
    || (int)($old['refund_id'] ?? 0) !== 325
    || (int)($old['apply_code'] ?? -1) !== 0
    || (int)($old['agree_code'] ?? -1) !== 0
    || ($old['passed'] ?? true) !== false) {
    throw new RuntimeException('Original B receipt is not the known fixture-assertion miss');
}
$applyRaw = $root . '/refund10001-apply.raw';
$agreeRaw = $root . '/refund10001-agree.raw';
if (hash_file('sha256', $applyRaw) !== $old['apply_response_sha256']
    || hash_file('sha256', $agreeRaw) !== $old['agree_response_sha256']) {
    throw new RuntimeException('Original HTTP raw responses changed');
}
$cfg = (require $root . '/application/database.php')['ai_zhct'];
$pdo = new PDO('mysql:host=' . $cfg['hostname'] . ';port=' . ($cfg['hostport'] ?? 3306)
    . ';dbname=' . $cfg['database'] . ';charset=utf8mb4',
    $cfg['username'], $cfg['password'],
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$stmt = $pdo->prepare('SELECT LOG_ID,ORDER_ID,SCENE,MONEY,BALANCE_AFTER'
    . ' FROM yoshop_user_balance_log WHERE USER_ID=? AND STORE_ID=?'
    . ' AND ORDER_ID IN (?,?) ORDER BY LOG_ID');
$stmt->execute([46921, 10001, 68503, 325]);
$logs = array_map(static function (array $row): array {
    return array_change_key_case($row, CASE_LOWER);
}, $stmt->fetchAll(PDO::FETCH_ASSOC));
$stmt = $pdo->prepare('SELECT BALANCE FROM yoshop_user WHERE USER_ID=? AND STORE_ID=?');
$stmt->execute([46921, 10001]);
$cash = (string)$stmt->fetchColumn();
$expected = count($logs) === 2
    && (int)$logs[0]['order_id'] === 68503
    && (int)$logs[1]['order_id'] === 325
    && bccomp((string)$logs[0]['money'], '-0.01', 2) === 0
    && bccomp((string)$logs[1]['money'], '0.01', 2) === 0
    && bccomp($cash, '0.05', 2) === 0;
$receipt = [
    'lane' => 'B', 'marker' => 'CDXPPREF12B01-O1',
    'correction_type' => 'test-assertion-only-no-http-no-dml',
    'original_receipt_sha256' => hash_file('sha256', $root . '/refund10001-receipt.json'),
    'original_apply_response_sha256' => hash_file('sha256', $applyRaw),
    'original_agree_response_sha256' => hash_file('sha256', $agreeRaw),
    'original_apply_code' => $old['apply_code'],
    'original_agree_code' => $old['agree_code'],
    'refund_id' => 325,
    'consume_log_order_id' => count($logs) > 0 ? (int)$logs[0]['order_id'] : null,
    'refund_log_order_id' => count($logs) > 1 ? (int)$logs[1]['order_id'] : null,
    'cash_log_rows_for_owned_ids' => count($logs),
    'cash_after_refund' => $cash,
    'original_other_assertions' => [
        'refund_status' => $old['refund_status_after_agree'],
        'meal_refund_status' => $old['meal_refund_status_after_agree'],
        'refund_settlement_rows' => $old['refund_settlement_rows'],
        'refund_stub_delta' => $old['stub_refund_hits_delta'],
    ],
    'passed' => $expected
        && (int)$old['refund_status_after_agree'] === 2
        && (int)$old['meal_refund_status_after_agree'] === 3
        && (int)$old['refund_settlement_rows'] === 1
        && (int)$old['stub_refund_hits_delta'] === 1,
];
file_put_contents($root . '/refund10001-correction-receipt.json',
    json_encode($receipt, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
    LOCK_EX);
chmod($root . '/refund10001-correction-receipt.json', 0600);
echo json_encode($receipt, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
exit($receipt['passed'] ? 0 : 1);
