#!/usr/bin/env python3
"""Scoped article/annex intake, retaining the uncorrected single-delete defect."""
import hashlib
import json
import subprocess
import sys
from pathlib import Path
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE = Path(__file__).resolve().parent
REVIEW = Path('/private/tmp/cdx-ai-hk-course-b.Kmdirn/review-store-272-277')
REPORT = tool.STORE + 'parallel-article-training-annex-20261013/ROOT_REVIEW.md'
COMMIT = 'e379012c15c14d2a737946e31cc5fe51d76c8404'


def verify():
    for name, sha in {'verify_review.py': '7486a031c3db01d98c75d29bf9749de723230156611701b88597c8bc35e6d5bd',
                      'INPUTS.json': 'deaa2cebeaacfa7da33dff1995169636c188021ddef98f447eae09e3388d15fb'}.items():
        assert hashlib.sha256((REVIEW / name).read_bytes()).hexdigest() == sha
    result = json.loads(subprocess.check_output([sys.executable, '-B', str(REVIEW / 'verify_review.py')]))
    assert result['verified'] and result['supplemental_checks'] == 911 and result['sealed_assets'] == 504
    assert result['raw_HTTP_total_including_baselines'] == 35 and len(result['unique_keys']) == 8
    assert result['DB_calls'] == result['HTTP_calls'] == 0
    pins = {
        'Article.php': 'ae16e63807cb30c318c9fbed5f830b173e97356f6536f928519437bff366d2b8',
        'TrainAnnex.php': '7ba304d7ee3c5139c5f2c9d09b4f0dd88ea1da0c9b802063499c3fa1503f2897',
        'MaterialAnnex.php': 'b5be24e2ffe2b3112cefce78ebda1c02b39936b662111e3ecf9306459b5b68d1',
        'TrainExperience.php': '5007cde9065da188920c6224783af78edec6d99c1470adcbe2ad52a4d6407456',
    }
    for name, sha in pins.items():
        source = subprocess.check_output(['git', '-C', str(tool.source_root('store')), 'show', COMMIT + ':application/p/logic/' + name])
        assert hashlib.sha256(source).hexdigest() == sha
    subprocess.check_call(['git', '-C', str(tool.source_root('store')), 'merge-base', '--is-ancestor', COMMIT, 'develop_dameng'])


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-article-annex277.json'
    assert not audit.exists(), 'Never replay main'
    rows = [item('store', 'POST', path, '', evidence=REPORT,
        success_case='partial-evidence-original-owned-annex-or-article-full-response-native-row-regression',
        readback='tested-pass-complete-own-rows-and-natural-source-hashes-no-storage-acceptance',
        request_type='multipart-for-material-add-otherwise-original-form',
        parity='partial-evidence-full-raw-object-array-types-and-known-field-contract-only',
        cleanup='own-child-rows-deleted-originally-no-natural-row-or-real-file-mutation')
        for path in ['/p/article/lists', '/p/materialAnnex/add', '/p/trainexperience/infoAdd', '/p/trainexperience/annexLists']]
    # A verified Store key already exists beside an old unreviewed duplicate.
    # Update only Store; never reassign that duplicate and inflate the inventory.
    rows.append(item('store', 'POST', '/p/trainexperience/annexDelete', '', evidence=REPORT,
        mysql_state='tested-fail-legacy-single-wrong-model-batch-positive-also-observed',
        dm_state='partial-evidence-batch-positive-single-not-tested',
        success_case='failed-legacy-single-branch-B-batch-positive-both',
        readback='tested-pass-own-comma-separated-batch-deletes-exactly-one-row',
        parity='failed-single-branch-remains-open-batch-full-raw-parity'))
    rows += [item('store', 'POST', path, '', evidence=REPORT, evidence_only=True)
             for path in ['/p/article/able', '/p/article/delete', '/p/materialAnnex/delete']]
    tool.main(rows, audit, verify)
