#!/usr/bin/env python3
"""One marked supplement order and full internal refund per engine, no replay."""
import hashlib
import json
import subprocess
from pathlib import Path
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item
from integrate_20261012_batch148 import shape

HERE = Path(__file__).resolve().parent
PRIVATE = tool.ROOT.parent / 'worktrees/dm8-compat-20261012/private-prepay-harness'
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-supplement-create-refund-20261012/'


def verify():
    pins = {
        'SUPPLEMENT_CREATE_REFUND_BC_EVIDENCE_20261012.md': 'd605a210db58c4adabd76a2d68f0edc1c6e434b5646564e6fc5629fdb9d94bfe',
        'verify_supplement_create_150_offline.php': 'be78431c3cf6bbc9e03054c668ca550d055ff9aa6a7b3b79d6b624f3215361e3',
        'B-supplement-create-150-result.json': 'dcc1b9a4d7fad9e33283aa5bb457b94702e1ec2c3362b1ca3841366275d25336',
        'C-supplement-create-150-result.json': '7afb3baf3c7d3bf59593c553ca9d39bdcd9f4841a2dd435291e6fae6fdbf6448',
        'B-supplement-refund-150-apply-result.json': '990e11df2b3cab851b6e1d0cb59c873eb3d6503b8fa3bad93f2cec5c3cd060c7',
        'C-supplement-refund-150-apply-result.json': 'd4e38295f36058dc8317b485d59f3355ffe41c9a758a42805487f21c6d091a10',
        'B-supplement-refund-150-agree-result.json': '43794c68294596280d24b89c37d84f12671600fecabfa65a15a4855395dba8ad',
        'C-supplement-refund-150-agree-result.json': 'a53970b48cb063cf0469e515c8be9cefb2803ee49f6cf117f251127e64c4b42b',
        'B-supplement-create-150-final-readonly-audit.json': '224072783cdc5e170bd70a1479db139e1395d429ac6583002e766cda30519172',
        'C-supplement-create-150-final-readonly-audit.json': '8c90399461af53cab8b90bf47dc8e445761c35361114d6883580b820e42cd9b4',
        'B-supplement-create-150-quote-receipt.json': 'f02082dc0022be552e5600d5ef9995e558ae8a0f4a0addb1d2bc715ef8d68f2e',
        'C-supplement-create-150-quote-receipt.json': '36b05a91c69585be5590903f3cf68d6fd777511cf217d1533d36386bcd8b7c07',
    }
    for name, digest in pins.items():
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    r = json.loads(subprocess.check_output(['docker', 'exec', 'zhctapp_v2_0', '/usr/local/php7.3/bin/php',
        '/workspace/zhct/worktrees/dm8-compat-20261012/private-prepay-harness/verify_supplement_create_150_offline.php']))
    assert r['offline_verify'] == 'pass' and not r['database_connected'] and not r['business_http_replayed']
    trees = []
    for lane in ['B', 'C']:
        assert r['summary'][lane]['http_business_requests'] == 4
        assert r['summary'][lane]['wallet_final'] == '0.05' and r['summary'][lane]['dispatcher_stub_delta'] == 1
        read = lambda name: json.loads((PRIVATE / (lane + '-supplement-' + name)).read_text())
        one = {}
        for label, raw, receipt, route in [
            ('quote', 'create-150-quote-positive.raw', 'create-150-quote-receipt.json', '/p/supplementMealOrder/quote'),
            ('create', 'create-150-response.raw', 'create-150-result.json', '/p/supplementMealOrder/create'),
            ('apply', 'refund-150-apply.raw', 'refund-150-apply-result.json', '/p/mealOrder/refund'),
            ('agree', 'refund-150-agree.raw', 'refund-150-agree-result.json', '/p/mealOrder/refundAgree'),
        ]:
            body, doc = read(raw), read(receipt)
            assert type(body['code']) is int and body['code'] == 0
            if label == 'quote':
                assert body['data']['quote'] == doc['responses']['positive']['quote']
            else:
                assert doc['route'] == 'POST ' + route and doc['request_count'] == 1
                assert json.dumps(body['data']) == json.dumps(doc['response_data'])
            if label == 'create':
                assert body['data']['meal_order_id'] == int(doc['order']['id'])
                assert body['data']['supplement_id'] == int(doc['supplement']['id'])
            if label == 'apply':
                assert type(body['data']['refund_id']) is str and body['data']['refund_id'] == str(doc['refund']['id'])
            if label == 'agree':
                assert body['data'] == []
            one[label] = shape(body)
        trees.append(one)
    assert trees[0] == trees[1]


if __name__ == '__main__':
    audit = HERE / 'integration-20261012-batch150.json'
    assert not audit.exists()
    specs = [item('store', 'POST', '/p/supplementMealOrder/create', BASE,
        from_repo='unreviewed', from_source='apifox-2026-05-08',
        risk='owned-internal-cash-supplement-create-and-full-refund-no-real-provider',
        readback='tested-pass-two-customer-DB-order-settlement-cash-ledger-audit-and-wallet-0.05-to0.04-to0.05',
        success_case='partial-evidence-one-0.01-cash-order-no-strategy-no-repeat-no-fault-injection',
        parity='partial-evidence-recursive-native-response-types-and-source-ID-money-linkage',
        cleanup='synthetic-refunded-orders-ledgers-retained-own-department-hidden-private-dispatcher-only')]
    for path in ['/p/supplementMealOrder/quote', '/p/mealOrder/refund', '/p/mealOrder/refundAgree']:
        specs.append(item('store', 'POST', path, BASE, evidence_only=True,
                          risk='owned-internal-cash-supplement-chain-regression'))
    tool.main(specs, audit, verify)
