#!/usr/bin/env python3
"""Record actual Staff.info reads without hiding the seven missing DM columns."""
import hashlib
import json
import re
import subprocess
from pathlib import Path
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE = Path(__file__).resolve().parent
PRIVATE = tool.ROOT.parent / 'worktrees/dm8-compat-20261012/private-prepay-harness/batch162-staff-info'
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-staff-info-three-fields-20261012/'


def verify():
    report = PRIVATE / 'REPORT.md'
    assert hashlib.sha256(report.read_bytes()).hexdigest() == 'e77656843ee962ea034e223ae41672c02392275430136dc5dcd2bedc968c47a8'
    for file, digest in re.findall(r'\| `([\w.-]+)` \| `([0-9a-f]{64})` \|', report.read_text()):
        assert hashlib.sha256((PRIVATE / file).read_bytes()).hexdigest() == digest
    for file, digest in [
        ('application/p/logic/Staff.php', '97214536ef6128076bba7db4a8385b407b3055205ba2aa032fb5efd4ccbfc32e'),
        ('tests/Staff/StaffInfoResponseContractTest.php', '50f30840f20d42c0b7484dc0eba2bf719a3a77781f589d191b2b0fb78fb00489'),
    ]:
        assert hashlib.sha256((tool.source_root('store') / file).read_bytes()).hexdigest() == digest
    result = 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/batch162-staff-info/verify_retest_offline.php']))
    assert result['status'] == 'verified-three-field-fix-schema-still-fail'
    assert result['actual_retest_http'] == 2 and result['mysql_original_raw_bytes_unchanged']
    assert result['dm_only_three_leaf_changes'] and result['own_five_full_rows_unchanged']
    assert len(result['dm_missing_staff_fields']) == 7 and result['common_key_json_type_differences'] == []
    assert result['qr_getInstance_hits'] == result['business_dml'] == 0
    for lane in ['B', 'C']:
        old = (PRIVATE / (lane + '-staff162-info.raw')).read_bytes()
        new = (PRIVATE / (lane + '-staff162-info-retest.raw')).read_bytes()
        expected, actual = json.loads(old), json.loads(new)
        assert type(actual['data']) is dict and type(actual['data']['0']) is dict
        if lane == 'B':
            assert old == new
        else:
            expected['data']['0']['height'] = '172.00'
            expected['data']['0']['money'] = '0.00'
            expected['data']['0']['create_time'] = expected['data']['0']['create_time'][:19]
            assert expected == actual


if __name__ == '__main__':
    audit = HERE / 'integration-20261012-batch162.json'
    assert not audit.exists()
    specs = [item('store', 'POST', '/p/staff/info', BASE,
        risk='owned-staff-read-prepared-used-deleted-usercode-no-QR-generation',
        readback='tested-pass-own-Staff-User-Code-Department-link-five-full-rows-unchanged',
        success_case='partial-evidence-positive-detail-read-three-field-fix-seven-DM-columns-still-missing',
        parity='tested-fail-seven-DM-staff-fields-missing-three-common-format-fields-fixed',
        cleanup='one-used-deleted-test-UserCode-retained-secret-never-published-QR-hardblock-zero-hits')]
    tool.main(specs, audit, verify)
