#!/usr/bin/env python3
"""Four owned empty group deletion samples; never delete actual files or replay HTTP."""
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-files-group-delete-20261012/'
RECEIPTS = [
    ('store', 'group-delete-4f2f59cf73b6acad1a3056d867962b33ea074cba1dc8b1e737ab508b1c97aa1f.json'),
    ('store', 'C_group_delete_store_e11ddf51.json'),
    ('terminal', 'group-delete-385a3508678a0e0888632098379f6c23d16713a61be01181d6abe139f1161fbe.json'),
    ('terminal', 'C_group_delete_terminal_c77db891.json'),
]


def verify():
    for name, digest in [
        ('run_group_delete_owned.php', '8dd42877dc29f976f5ef388f97b7b40a2cdf3bd958b1c92fa06c0ab90a4cb4ac'),
        ('verify_group_delete_receipts.php', '6d52a2831be0171aa520eb38fbffc5fdf1c91a359024848e6d857ea441341614'),
    ]:
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    r = json.loads(subprocess.check_output(['/opt/homebrew/opt/php@7.4/bin/php', str(PRIVATE / 'verify_group_delete_receipts.php')]))
    assert r['status'] == 'verified' and r['db_or_http_calls'] == 0 and r['new_unique_keys'] == 2
    assert len(r['targets']) == 4
    for t in r['targets'].values():
        assert t['passed'] and len(t['checks']) == 5 and all(t['checks'].values())
    normalized = {'add': [], 'delete': []}
    for surface, name in RECEIPTS:
        events = json.loads((PRIVATE / 'runtime' / name).read_text())['events']
        http = [e for e in events if e['phase'].startswith('after_http_')]
        assert len(http) == 2
        for e in http:
            action = e['phase'].removeprefix('after_http_')
            assert e['method'] == 'POST' and e['path'].split('?')[0] == '/' + surface + '/files.Group/' + action
            body = json.loads(e['raw_response_exact'])
            assert body['status'] == 200
            body.pop('trace_id', None)
            normalized[action].append(body)
    for rows in normalized.values():
        assert len(rows) == 4 and all(row == rows[0] for row in rows)


if __name__ == '__main__':
    audit = HERE / 'integration-20261012-batch139.json'
    assert not audit.exists()
    specs = [item('ai_api', 'POST', '/' + surface + '/files.Group/delete', BASE,
        from_repo='unreviewed', from_source='apifox-2026-05-08',
        risk='own-empty-file-group-delete-no-actual-file-or-OSS',
        readback='tested-pass-fourbyte-name-sort0-own-group1-to0-zero-file-refs-and-children',
        parity='partial-evidence-original-public-JSON-equal-minus-trace-source-row-verified',
        cleanup='owned-marker-zero-token-absent-zero-external')
        for surface in ['store', 'terminal']]
    specs += [item('ai_api', 'POST', '/' + surface + '/files.Group/add', BASE,
                   evidence_only=True, risk='own-empty-group-setup-regression')
              for surface in ['store', 'terminal']]
    tool.main(specs, audit, verify)
