#!/usr/bin/env python3
"""Owned delivered rows; synthetic paid state is not evidence of payment."""
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_batch202 import shape

HERE = Path(__file__).resolve().parent
PRIVATE = Path('/private/tmp/cdx-ai-hk-course-b.Kmdirn/meal213-owned-delivery')
BASE = 'work_ai_api/2026-09-30-dm8-interface-acceptance/parallel-order-delivery-20261013/'


def verify():
    for name, digest in {
        'REPORT_213.md': '39fc2275f0feb6b69b88b1773a69954ff3db8490a60a9c26d3c55a1fa39cb974',
        'verify213_offline.php': '624fd3354a22c46b10900dc59ea87ff619ae91cc47e5ddbd4d5c5521b6155184',
        'B-business-receipt.json': '1e959a5b87faef1d869388138b072c079d9dad9f0986513e5c821f0adff61a1e',
        'C-business-receipt.json': 'dc66bf19dd22fe32c13e91391eb212d18ed762b079bb385b2da7e2d096fd4999',
    }.items():
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    r = json.loads(subprocess.check_output(['/opt/homebrew/opt/php@7.4/bin/php', str(PRIVATE / 'verify213_offline.php')]))
    assert r['status'] == 'verified' and r['original_POST_total'] == 4
    bodies = {}
    for lane in ('B', 'C'):
        record = json.loads((PRIVATE / f'{lane}-business-receipt.json').read_text())
        events = {e['phase']: e['data'] for e in record['events']}
        before = record['source_before']
        for app in ('store', 'terminal'):
            after = events['source_after_' + app]['source_after']
            for table, count, allowed in [
                ('order', 37, {'delivery_status', 'delivery_time', 'update_time'}),
                ('order_goods', 33, {'delivery_status', 'delivery_num', 'update_time'}),
            ]:
                a, b = after[app + '_' + table][0], before[app + '_' + table][0]
                assert len(a) == len(b) == count and set(a) == set(b)
                changes = {k for k in a if type(a[k]) is not type(b[k]) or a[k] != b[k]}
                assert changes <= allowed
            form = json.loads(events['http_intent_' + app]['request_body_exact'])['form']
            delivery = after[app + '_delivery'][0]
            assert delivery['eorder_html'] == form['eorderHtml']
            assert delivery['express_no'] == '' and delivery['express_id'] == 0
            body = json.loads(events['http_result_' + app]['raw_response_exact'])
            assert isinstance(body['data'], list) and body['data'] == []
            body.pop('trace_id'); bodies[lane, app] = body
            before = after
    for app in ('store', 'terminal'):
        assert shape(bodies['B', app]) == shape(bodies['C', app])
        assert bodies['B', app] == bodies['C', app]


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch213.json'
    assert not audit.exists(), 'Do not replay matrix integration'
    specs = [item('ai_api', 'POST', '/' + app + '/order.Delivery/delivery', BASE,
        success_case='partial-evidence-owned-nonempty-delivery-synthetic-paid-state-not-actual-payment-or-Wechat',
        readback='tested-pass-four-table-owned-parent-child-row-transitions-Goods-User-other-order-unchanged',
        parity='partial-evidence-original-complete-JSON-keys-values-types-equal-except-trace',
        cleanup='own-marked-business-rows-retained-five-auth-links-removed-token-zero-no-external')
        for app in ('store', 'terminal')]
    tool.main(specs, audit, verify)
