#!/usr/bin/env python3
"""Original HTTP + own role/relation readback, no write replay."""
import hashlib
import json
import subprocess
from pathlib import Path
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE = Path(__file__).resolve().parent
PRIVATE = Path('/private/tmp/cdx-ai-hk-course-b.Kmdirn')
BASE = 'work_ai_api/2026-09-30-dm8-interface-acceptance/parallel-terminal-role-20261012/'


def verify():
    for name, digest in [
        ('run_terminal_role_crud.php', '5b5d95b94ddb8e083fcbd0d8570ff325744d5bb1538735b5833eae31c0bd0d01'),
        ('verify_terminal_role_receipts.php', 'ed8c10023b94e0483a570ee52ad9a6b2228e899b7850019f102ee4e31060f16d'),
    ]:
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    result = json.loads(subprocess.check_output(['/opt/homebrew/opt/php@7.4/bin/php', str(PRIVATE / 'verify_terminal_role_receipts.php')]))
    assert result['status'] == 'verified' and result['business_http_or_db_calls'] == 0
    assert result['list_recursive_key_and_php_json_type_equal']
    for lane in ['B', 'C']:
        assert result['targets'][lane]['checks_passed'] and len(result['targets'][lane]['checks']) == 8
    for name in ['terminal-role-crud-CDXPARROLE3B1CFD3EF9.json', 'C_terminal_role_crud_CD09B41B8129.json']:
        events = json.loads((PRIVATE / 'runtime' / name).read_text())['events']
        by = {e['phase']: e for e in events}
        assert by['before_setup']['prior_prefix_rows'] == by['before_add']['role_rows'] == 0
        assert by['verify_add']['role_count'] == by['verify_edit']['role_count'] == 1
        assert by['verify_add']['role_row_sha256'] == by['verify_list']['role_row_sha256']
        assert by['verify_edit']['role_row_sha256'] != by['verify_add']['role_row_sha256']
        assert by['verify_add']['own_role_id'] == by['verify_edit']['own_role_id'] == by['verify_delete']['own_role_id']
        for action in ['add', 'list', 'edit', 'delete']:
            e = by['after_http_' + action]
            assert e['path'].split('?')[0] == '/terminal/store.Role/' + action
            assert e['method'] == ('GET' if action == 'list' else 'POST')
            body = json.loads(e['raw_response_exact'])
            assert body['status'] == 200
        assert by['verify_delete']['role_rows_after'] == by['verify_delete']['relation_rows_after'] == 0


if __name__ == '__main__':
    audit = HERE / 'integration-20261012-batch130.json'
    assert not audit.exists()
    targets = [item('ai_api', 'GET' if action == 'list' else 'POST', '/terminal/store.Role/' + action, BASE,
        from_repo='unreviewed', from_source='apifox-2026-05-08',
        risk='owned-role-and-menu-relation-only-no-natural-user-binding',
        request_type='GET-filter-or-JSON-form-see-original-request-receipts',
        readback='tested-pass-owned-role0-to1-to1-to0-and-menu-relations0-to2-to1-to0',
        parity='partial-evidence-original-HTTP-and-owned-row-values-list-JSON-types-equal',
        cleanup='owned-role-and-relations-zero-token-absent-external-zero-no-global-row-invariance-claim')
        for action in ['add', 'list', 'edit', 'delete']]
    tool.main(targets, audit, verify)
