#!/usr/bin/env python3
"""RegisterManagement creator red and repaired original HTTP/full-row contracts."""
import base64
import hashlib
import json
from pathlib import Path
import subprocess
import sys
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE = Path(__file__).resolve().parent
STAGE = Path('/Users/wiscourper/Documents/workspace/local/dm8-store-purchase-read3-20261012.L5dTYR/stage3')
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-register-management-20261013/'


def verify():
    for number, report, manifest, checks, assets in [
        (218, '0bbfbc0d023092a1523f39d23a65fda89303baf49c5d125644a8aabe5f39beba', '5d9ee18870a18f51e33d5b26a30fb807f757ddabb45b6c2f5d428120c7e0426e', 554, 93),
        (220, 'cee9aaca17942f8a9558f59d0bb4e1553f13adb762336b67e0ff0d3c3220d18a', '35e5aed729dbaef3623c0c8a3e29f54afad00f0fb9ba000f684c0ae6279cc926', 553, 87),
    ]:
        root = STAGE / f'register{number}-20261013'
        for name, digest in {f'REPORT{number}.md': report, f'manifest{number}.json': manifest,
            'verify_register.py': '2d8c4905a4ea240ecfcba7e3595a16109ec2e73b23cc46c95550db183c428507'}.items():
            assert hashlib.sha256((root / name).read_bytes()).hexdigest() == digest
        result = json.loads(subprocess.check_output([sys.executable, '-B', str(root / 'verify_register.py')]))
        assert result['checks'] == checks and result['assets'] == assets
        assert result['old_date_HTTP_red_not_claimed']
    failed = json.loads((STAGE / 'register218-20261013/evidence-C/private/response-A218.json').read_text())
    native = [r for r in failed['native'] if r['kind'] == 'write'][0]
    assert len(native['lease']['data']['create_by']) == 36 and not native['success']
    for lane in ('B', 'C'):
        root = STAGE / ('register220-20261013/evidence-' + lane + '/private')
        wire = json.loads((root / 'response-R220.json').read_text())
        body = json.loads(base64.b64decode(wire['body_base64']))
        row = json.loads((root / 'audit-final.json').read_text())['own'][0]
        assert isinstance(body['data'], dict) and set(body['data']) == set(row) and len(row) == 11
        for key, value in row.items():
            if lane == 'C' and key == 'create_time':
                assert value.endswith('.000000'); value = value[:-7]
            assert type(body['data'][key]) is type(value) and body['data'][key] == value
        assert type(body['data']['register_certificate_number']) is str
        assert body['data']['register_certificate_number'] == ('0921813130001' if lane == 'B' else '0921813130002')
        assert type(body['data']['type']) is int and type(body['data']['sport_year']) is str
        if lane == 'C':
            added = json.loads((root / 'response-A220.json').read_text())
            assert row['id'] == int(added['ids']['id']) and row['uuid'] == added['ids']['uuid']


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch220.json'
    assert not audit.exists(), 'Do not replay matrix integration'
    specs = [item('store', 'POST', '/p/RegisterManagement/' + action, BASE,
        success_case='partial-evidence-original-owned-register-create-update-info-218B-220C-creator-red-fixed',
        readback='tested-pass-complete-eleven-column-input-row-contract-leading-zero-certificate-and-native-ID',
        parity='partial-evidence-complete-JSON-source-values-types-MySQL-wire-unchanged-DM-time-zero-fraction',
        cleanup='marked-records-retained-four-private-workers-reused-token-cache-zero-no-Staff-or-external-write')
        for action in ('add', 'update', 'info')]
    tool.main(specs, audit, verify)
