#!/usr/bin/env python3
"""Extra nonempty stock branch for an existing key, not a new route."""
import hashlib
import json
from pathlib import Path
import subprocess
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item
from integrate_20261013_batches221_223_224_226 import shape, wire

HERE = Path(__file__).resolve().parent
ROOT = Path('/Users/wiscourper/Documents/workspace/local/dm8-sealed-ai-20261013.4PoFa9/meal233-stock-cancel')
BASE = tool.AI + 'parallel-stock-cancel-20261013/'


def verify():
    for name, digest in {
        'REPORT_233.md': 'dde89dce1153f5866a5c2d34c14b60fd8948dc92ed9f87b620a56af4160fda9e',
        'verify233_offline.php': '0c17a3bae919a5a77f3bf84c1d667257172d824ebdb025e46f3fadbd382043a6',
        'run233-B.json': '04b9d85547d98ac2a61ee24d53d7cb7070dd7ddc34f79ce7049c8911c4856576',
        'run233-C.json': 'c1d6d4c83cfd13daca9d5d3914d7360a74c747ef6184c89bc705050535191594',
    }.items():
        assert hashlib.sha256((ROOT / name).read_bytes()).hexdigest() == digest
    subprocess.run(['/opt/homebrew/opt/php@7.4/bin/php', str(ROOT / 'verify233_offline.php')], check=True, capture_output=True)
    bodies = []
    for lane in ('B', 'C'):
        e = {r['stage']: r for r in json.loads((ROOT / f'run233-{lane}.json').read_text())['events']}
        before, after = e['before_http'], e['independent_readback']
        for table, width, field, old, new in [('order', 37, 'order_status', 10, 20),
                ('goods', 36, 'stock_total', 5, 7), ('sku', 14, 'stock_num', 5, 7)]:
            a, b = before[table + '_before'], after[table + '_after']
            assert len(a) == len(b) == width and set(a) == set(b) and shape(a) == shape(b)
            assert type(a[field]) is int and a[field] == old and b[field] == new
            assert {k for k in a if a[k] != b[k]} <= {field, 'update_time'}
        og = before['order_goods_before']
        assert len(og) == 33 and og == after['order_goods_after'] and type(og['total_num']) is int and og['total_num'] == 2
        assert og['goods_id'] == before['goods_before']['goods_id']
        assert og['goods_sku_id'] == before['sku_before']['goods_sku_id']
        assert og['order_id'] == before['order_before']['order_id']
        assert before['sku_before']['goods_id'] == og['goods_id']
        body = wire(e['original_http'])
        assert type(body['data']) is list and body['data'] == []
        bodies.append(body)
    assert shape(bodies[0]) == shape(bodies[1]) and bodies[0] == bodies[1]


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch233.json'
    assert not audit.exists(), 'Never replay integration main'
    tool.main([item('ai_api', 'POST', '/api/order/cancel', BASE,
        success_case='partial-evidence-original-unpaid-empty-and-owned-nonempty-stock-cancel-no-real-checkout',
        readback='tested-pass-full37-36-14-33-order-and-two-stocks-source-protection-secondary-mapping-empty',
        parity='partial-evidence-full-original-wire-values-types-and-source-row-transitions-paid-refund-open',
        cleanup='four-marked-fixtures-retained-worker-token-zero-no-real-external-call')], audit, verify)
