#!/usr/bin/env python3
"""Record actual Store reads, enum and shared missing-controller failures."""
import hashlib
import json
from pathlib import Path
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE=Path(__file__).resolve().parent
PRIVATE=Path('/Users/wiscourper/Documents/workspace/local/dm8-resume-connect-20261012.q6m3ar')
BASE='work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-trainunit-alias-20261012/'
REPORT=BASE+'ROOT_REVIEW.md'
PINS={
 'alias-root-B-initial.json':'75bf1eacf7af0bf4e7ee9325fc083f107a1d1bad793a12ef68b9b5cc2894082b',
 'alias-root-C-initial.json':'02559c6231c0ea94e9fea0060f399984b80d44202c0cd5f76c7295e4f477b7eb',
 'alias-root-C-wallet-utf8.json':'b3c46c502deb14ac8abc8448927c808d49caaa42c5681a59645ad62e90ef36d4',
 'alias-source-proof.json':'caf162fe7a5c5d0aca685f38368060b3a913aa8e6d574c87082dbd5888bddca9'}

def verify():
    data={}
    for name,digest in PINS.items():
        raw=(PRIVATE/name).read_bytes()
        assert hashlib.sha256(raw).hexdigest()==digest
        data[name]=json.loads(raw)
    source=data['alias-source-proof.json']
    assert source['B_matches'] and source['C_matches'] and len(source['files'])==11
    for name,digest in source['files'].items():
        assert hashlib.sha256((tool.source_root('store')/name).read_bytes()).hexdigest()==digest
    for lane in ['B','C']:
        r=data[f'alias-root-{lane}-initial.json']['results']
        assert len(r)==7
        for action in ['add','update','status','delete']:
            x=r['trainunit_'+action]
            assert x['http']==404 and x['code']=='2' and x['json']
        x=r['payment_methods']
        assert x['http']==200 and x['code']==0 and x['count']==8 and x['row_fields']=={'name':'string','value':'string'}
        x=r['subsidy_list']
        assert x['http']==200 and x['code']==0 and x['rows']==x['source_rows']==1
        assert x['synthetic_row'] and x['money_readback'] and x['amounts']=={'sum_money':'20.00','sum_used_money':'0.00','subsidy_amount':'20.00'}
        assert all(x['row_fields'][k]=='string' for k in x['amounts'])
    b=data['alias-root-B-initial.json']['results']['wallet_departments']
    c=data['alias-root-C-wallet-utf8.json']['results']['wallet_departments']
    assert b['count']==b['db_count']==2310 and c['count']==c['db_count']==27
    assert b['exact_source_match'] and c['exact_source_match'] and c['native_names_utf8']
    assert not data['alias-root-C-initial.json']['results']['wallet_departments']['exact_source_match']
    assert (tool.ROOT/BASE/'ACTUAL_HTTP_REPORT.md').is_file()

def targets():
    out=[]
    for action in ['add','update','status','delete']:
        out.append(item('store','POST','/p/trainunit/'+action,BASE,evidence=REPORT,
            mysql_state='tested-fail-shared-original-controller-missing',dm_state='tested-fail-shared-original-controller-missing',
            readback='not-applicable',success_case='not-tested-controller-missing',
            parity='shared-missing-controller-http404-code-string2-not-CRUD-pass',scope='no-business-db-controller-missing'))
    out.append(item('store','POST','/p/payment/methods',BASE,evidence=REPORT,scope='no-db',
        readback='not-applicable',success_case='partial-evidence-static-enum-eight-items',parity='partial-evidence-eight-enum-item-name-value-string'))
    out.append(item('store','POST','/p/walletFlow/departments',BASE,evidence=REPORT,
        readback='partial-evidence-per-engine-department-UUID-name-set-and-count-equal-own-source',
        parity='partial-evidence-UUID-name-string-types-own-source-different-natural-snapshots'))
    out.append(item('store','POST','/p/subsidy/list',BASE,evidence=REPORT,
        readback='partial-evidence-one-marked-staff-AI-subsidy-row-SUM-money-source-match',
        parity='partial-evidence-sum-money-used-and-balance-two-decimal-strings'))
    out.append(item('store','POST','/p/role/departmentStaffs',BASE,evidence=REPORT,
        mysql_state='partial-evidence-HTTP200-structure-only',dm_state='partial-evidence-HTTP200-structure-only',
        readback='partial-evidence-no-full-tree-oracle',success_case='partial-evidence-original-executor-structure-only-no-root-replay',
        parity='partial-evidence-top-level-shape-only',performance='not-accepted-B-11.9MB-35second-timeout-120second-success'))
    return out

if __name__=='__main__':
    audit=HERE/'integration-20261012-batch108.json'
    assert not audit.exists(),'Preserve original transition'
    tool.main(targets(),audit,verify)
