<?php
declare(strict_types=1);

// Exact recovery for one B-only order left before HTTP by missing isolated log config.
$mode = (string)($argv[1] ?? '');
$path = (string)($argv[2] ?? '');
if (!in_array($mode, ['--audit', '--execute', '--verify'], true)
    || !preg_match('#^/Users/wiscourper/\.codex/cashier-orderinfo-b-20261008/CDXCOI[0-9A-F]{10}\.json$#D', $path)
    || is_link($path) || !is_file($path) || ((fileperms($path) & 0077) !== 0)) {
    throw new RuntimeException('Exact B journal/mode required');
}
if ($mode === '--execute'
    && (getenv('CDX_RECOVER_B_ORDER') !== 'EXACT_68361_20261009'
        || !hash_equals((string)getenv('CDX_RECOVER_B_SHA'),
            (string)hash_file('sha256', __FILE__)))) {
    echo "DENIED business_dml=0\n"; exit(78);
}
$events = [];
foreach (file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
    $event = json_decode($line, true);
    if (!is_array($event)) throw new RuntimeException('Invalid journal event');
    $events[] = $event;
}
$marker = (string)($events[0]['marker'] ?? '');
$token = (string)($events[0]['token'] ?? '');
$id = 0; $inserted = false; $returned = false; $tokenZero = false;
foreach ($events as $event) {
    if (($event['phase'] ?? '') === 'owned_order_inserted') {
        $id = (int)($event['order_id'] ?? 0); $inserted = true;
    }
    if (($event['phase'] ?? '') === 'http_returned') $returned = true;
    if (($event['phase'] ?? '') === 'token_cleanup') $tokenZero = $event['token_zero'] === true;
}
if ($id !== 68361 || $path !== dirname($path) . '/' . $marker . '.json'
    || !preg_match('/^CDXCOI[0-9A-F]{10}$/D', $marker)
    || !preg_match('/^CDXCOI[0-9A-F]{10}T[0-9A-F]{24}$/D', $token)
    || !$inserted || $returned || !$tokenZero) {
    throw new RuntimeException('Journal does not identify pre-HTTP exact order');
}
$config = parse_ini_file('/Users/wiscourper/Documents/workspace/zhct/zhctproject/ai_api/.env.local',
    true, INI_SCANNER_RAW);
$d = $config['DATABASE_ZHCT'] ?? null;
if (!is_array($d) || strtolower((string)$d['TYPE']) !== 'mysql'
    || (string)$d['HOSTPORT'] !== '3306'
    || hash('sha256', (string)$d['HOSTNAME']) !==
        '47e8be48b0cfd56dcdb9d9d426e6637b245f340b4efad4cd2f084ec5851ecc8e'
    || hash('sha256', (string)$d['DATABASE']) !==
        'e8414690ae09be92817caeebf414e12ded85a2230818986fe9b866dbe4cfaef5') {
    throw new RuntimeException('Not approved code-local Store MySQL');
}
$db = new PDO('mysql:host=' . $d['HOSTNAME'] . ';port=' . $d['HOSTPORT']
    . ';dbname=' . $d['DATABASE'] . ';charset=' . $d['CHARSET'],
    $d['USERNAME'], $d['PASSWORD'],
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => 5]);
$one = static function (string $sql, array $args) use ($db): array {
    $s = $db->prepare($sql); $s->execute($args);
    $row = $s->fetch(PDO::FETCH_ASSOC);
    return is_array($row) ? array_change_key_case($row, CASE_LOWER) : [];
};
$count = static function (string $sql, array $args) use ($db): int {
    $s = $db->prepare($sql); $s->execute($args); return (int)$s->fetchColumn();
};
$row = $one('SELECT ID,ORDER_NO,REMARK,USER_ID,SOURCE,PAY_STATUS,ORDER_STATUS,'
    . ' ACCOUNT_SETTLEMENT_ID,IS_DELETE FROM ydy_meal_order WHERE ID=?', [$id]);
$children = [
    'menu' => $count('SELECT COUNT(*) FROM ydy_initial_menu WHERE MEAL_ORDER_ID=?', [$id]),
    'pickup' => $count('SELECT COUNT(*) FROM ydy_meal_order_pickup WHERE MEAL_ORDER_ID=?', [$id]),
];
$oldAudit = $count('SELECT COUNT(*) FROM ydy_meal_order WHERE ID=68323 AND USER_ID=97274'
    . ' AND SOURCE=4 AND PAY_STATUS=20 AND REMARK=?', ['CDXPARMOB838A9419']) === 1;
$owned = (int)($row['id'] ?? 0) === $id
    && $row['order_no'] === $marker && $row['remark'] === $marker
    && (int)$row['user_id'] === 97274 && (int)$row['source'] === 4
    && (int)$row['pay_status'] === 10 && (int)$row['order_status'] === 10
    && (int)$row['account_settlement_id'] === 0 && (int)$row['is_delete'] === 0;
if ($mode === '--audit') {
    echo json_encode(['mode' => 'audit', 'owned_exact_unpaid' => $owned,
        'child_counts' => $children, 'old_audit_intact' => $oldAudit,
        'http_returned' => $returned, 'token_reported_zero' => $tokenZero,
        'business_http' => 0, 'business_dml' => 0]), PHP_EOL;
    exit($owned && array_sum($children) === 0 && $oldAudit ? 0 : 1);
}
if ($mode === '--execute') {
    if (!$owned || array_sum($children) !== 0 || !$oldAudit)
        throw new RuntimeException('Exact cleanup precondition failed');
    $s = $db->prepare('DELETE FROM ydy_meal_order WHERE ID=? AND ORDER_NO=? AND REMARK=?'
        . ' AND USER_ID=97274 AND SOURCE=4 AND PAY_STATUS=10 AND ORDER_STATUS=10'
        . ' AND ACCOUNT_SETTLEMENT_ID=0 AND IS_DELETE=0');
    $s->execute([$id, $marker, $marker]);
    if ($s->rowCount() !== 1) throw new RuntimeException('Exact delete count not one');
    echo json_encode(['mode' => 'execute', 'exact_deleted' => 1]), PHP_EOL;
    exit(0);
}
$zero = $count('SELECT COUNT(*) FROM ydy_meal_order WHERE ID=? OR ORDER_NO=? OR REMARK=?',
    [$id, $marker, $marker]) === 0 && array_sum($children) === 0 && $oldAudit;
echo json_encode(['mode' => 'verify', 'exact_order_and_children_zero' => $zero,
    'old_audit_intact' => $oldAudit, 'business_http' => 0, 'business_dml' => 0]), PHP_EOL;
exit($zero ? 0 : 1);
