#!/usr/bin/env python3
"""Sealed original receipt and refund-goods branches; never claim full coverage."""
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')
BASE = tool.AI + 'parallel-receipt-refund-goods-20261013/'
PINS = {
    'meal238-receipt': {
        'REPORT_238.md': 'b39f93d185b353e0e3bdade8502603e52da50fbdad643070ca1d2b842d52e0c2',
        'verify238_offline.php': '04be591c3438002e31b66810edb287737fb423801a5bdfd4091c9cfd3cf07392',
        'run238-B.json': '5f1f4abaca65f1f396580b23038aa7926050d7ab635447dd7b0b16c10b36a68e',
        'run238-C.json': '1b699b8ffe4e290ccad2869d2a348a0f78415776c7a17399b888cc2126c41e86'},
    'meal239-refund-goods': {
        'REPORT_239.md': '150303d03c45b252dc612b8ba548ae7e46c01018f6563fa7f32df502358961a9',
        'verify239_offline.php': '5adf048d10a6e99a4d8b9b9313af93764809ee14f8f4a8192d1fc8eadb7eb1b9',
        'run239-B.json': '685c4594ac7c48f243b830f1023d0dddac95e29eb1c2a32eb8e8b951b7f525f4',
        'run239-C.json': '5c67d883a3ad9dedd3e5ec1e36d433473182614d6b65b1a8fbd78e7b670865b6'}
}


def verify():
    for directory, pins in PINS.items():
        root = ROOT / directory
        for name, digest in pins.items():
            assert hashlib.sha256((root / name).read_bytes()).hexdigest() == digest, name
        batch = 238 if directory == 'meal238-receipt' else 239
        subprocess.run(['/opt/homebrew/opt/php@7.4/bin/php', str(root / f'verify{batch}_offline.php')], check=True, capture_output=True)
        bodies = []
        for lane in ('B', 'C'):
            events = {e['stage']: e for e in json.loads((root / f'run{batch}-{lane}.json').read_text())['events']}
            event = events['original_http']
            body = wire(event)
            assert event['method'] == ('POST' if batch == 238 else 'GET')
            assert event['path'].split('?', 1)[0] == ('/api/order/receipt' if batch == 238 else '/api/refund/goods')
            if batch == 238:
                assert type(body['data']) is list and body['data'] == []
                old = events['before_http']['order_before']
                new = events['independent_readback']['order_after']
                assert len(old) == len(new) == 37 and shape(old) == shape(new)
                assert {k for k in old if old[k] != new[k]} <= {'order_status', 'receipt_status', 'receipt_time', 'update_time'}
            else:
                assert type(body['data']) is dict and type(body['data']['goods']) is dict
                assert len(body['data']['goods']) == 32
            bodies.append(body)
        assert shape(bodies[0]) == shape(bodies[1])
        if batch == 238:
            assert bodies[0] == bodies[1]


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batches238-239.json'
    assert not audit.exists(), 'Never replay integration main'
    tool.main([
        item('ai_api', 'POST', '/api/order/receipt', BASE,
             success_case='partial-evidence-original-receipt-refund-days7-synthetic-delivered-order',
             readback='tested-pass-full37-order-U1-and-eight-protected-scopes-no-asset-settlement',
             parity='partial-evidence-full-original-wire-equal-real-payment-delivery-not-tested'),
        item('ai_api', 'GET', '/api/refund/goods', BASE,
             success_case='partial-evidence-own-nonempty-unrefunded-goods-no-images',
             readback='tested-pass-own33-source-to32-response-and-five-protected-scopes',
             parity='partial-evidence-all-native-types-equal-only-six-owned-fixture-values-differ')
    ], audit, verify)
