#!/usr/bin/env python3
"""Store food edit: fourbyte names, zero and legal DECIMAL(10,2) upper bound."""
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-store-foods-edit-boundaries-20261012/'


def verify():
    for name, digest in [
        ('STORE_FOODS_EDIT_BOUNDARIES_MANIFEST_20261012.json', '56b373e330e7dcee49f1b6381b315d8ce25b7b008b95e0b439d084cf39931747'),
        ('run_store_foods_edit_boundaries.php', '9248a56096ba908cabac3d282e906104cee25b044ea8305bbd206cad2abfa00d'),
        ('verify_store_foods_edit_boundaries.php', 'b79286b82910f9a791ed4d5b089983fa26849fdd8c7aea7ccca63592b9f15e9c'),
    ]:
        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_store_foods_edit_boundaries.php')]))
    assert r['status'] == 'verified' and r['business_http_or_db_calls'] == 0
    assert r['synthetic_detail_all_fields_except_dynamic_equal'] and r['add_delete_detail_regression_only']
    for e in r['targets'].values():
        assert e['passed'] and len(e['checks']) == 15 and all(e['checks'].values())
    manifest = json.loads((PRIVATE / 'STORE_FOODS_EDIT_BOUNDARIES_MANIFEST_20261012.json').read_text())
    for name in ['B_receipt', 'C_receipt_local_copy']:
        events = json.loads(Path(manifest['evidence'][name]).read_text())['events']
        http = [e for e in events if e['phase'].startswith('after_http_')]
        assert len(http) == 8
        for e in http:
            action = e['phase'].removeprefix('after_http_').split('_')[0]
            assert e['method'] == ('GET' if action == 'detail' else 'POST')
            assert e['path'].split('?')[0] == '/store/dishes.Foods/' + action
            assert json.loads(e['raw_response_exact'])['status'] == 200


if __name__ == '__main__':
    audit = HERE / 'integration-20261012-batch138.json'
    assert not audit.exists()
    specs = [item('ai_api', 'POST', '/store/dishes.Foods/edit', BASE,
        from_repo='unreviewed', from_source='apifox-2026-05-08', risk='owned-food-write-decimal-and-UTF8MB4',
        readback='tested-pass-own-row-fourbyte-name-decimal-upper-server-text-exact-zero-input-and-HTTP-fixed2',
        boundary_empty_min_max='partial-evidence-energy0.00-and99999999.99-UTF8MB4-name',
        parity='partial-evidence-original-HTTP-fixed2-string-and-synthetic-detail-nondynamic-values-types-equal',
        cleanup='exact-owned-food-removed-links-zero-token-absent-external-zero')]
    specs += [item('ai_api', method, '/store/dishes.Foods/' + action, BASE,
                   evidence_only=True, risk='owned-food-boundary-fixture-regression')
              for method, action in [('POST', 'add'), ('GET', 'detail'), ('POST', 'delete')]]
    tool.main(specs, audit, verify)
