#!/usr/bin/env python3
"""Eight goods.Comment methods, actual writes and read-only alias parity controls."""
import json
from pathlib import Path
import sys
import integrate_20261010 as tool
from integrate_20261011_batches40_42 import manifest,private_files,run,sha

BASE=tool.AI+'parallel-ai-goods-comment-20261011/'

def verify():
    m=tool.load(BASE+'manifest.json')
    manifest(BASE,m['files'])
    r=json.loads(run(BASE,sys.executable,'compare.py'))
    assert r=={'HTTP':124,'full_BC_pairs':38,'B_body_unchanged':16,'historical_C_red':16}
    sql=json.loads(run(BASE,sys.executable,'sql_audit.py'))
    assert sql=={'B':{'DML':12,'DDL':0,'business_SELECT':244,'metadata':178,'own_row_checkpoints':490},
        'C':{'DML':12,'DDL':0,'business_SELECT':194,'metadata':96,'own_row_checkpoints':378}}
    run(BASE,sys.executable,'-m','unittest','discover','-p','test_compare.py')
    assert m['HTTP']=={'B':70,'C':54,'total':124}
    assert m['positive_original_projections']==92 and m['fixture_INSERT']=={'B':18,'C':18}
    assert m['business_DML']=={'B':12,'C':12} and m['DDL']==0
    native_requests=native_assertions=native_failures=0
    for lane in ['B','C']:
        clean=tool.load(BASE+'resource-cleanup-'+lane+'.json')
        assert clean['port_closed'] and clean['cache_removed'] and clean['own_source_removed']
        assert clean['tokens_checked_absent']==(6 if lane=='B' else 4)
        assert clean['credential_collections_and_native_reports_removed']
        assert clean['natural_comment_and_image_unchanged'] and clean['base_five_tables_unchanged']
        assert clean['retained_rows']=={'user':2,'upload_file':2,'goods':2,'order':2,'order_goods':2,'comment':6,'comment_image':2}
        private=tool.ROOT/BASE/'private-evidence'/lane
        private_files(private,{name:{'sha256':digest}for name,digest in clean['private_raw_sha256'].items()})
        for relative,digest in clean['source_sha256'].items():
            assert sha(tool.ROOT.parent/'zhctproject/ai_api'/relative)==digest
        for record in clean['native']:
            native_requests+=record['stats']['requests']['total']
            native_assertions+=record['stats']['assertions']['total']
            native_failures+=record['failures']
            raw=tool.load(BASE+f"native-{record['phase']}-{lane}.apifox-cli.json")
            assert raw['run']['stats']==record['stats']
    assert (native_requests,native_assertions,native_failures)==(124,496,16)

if __name__=='__main__':
    audit=Path(__file__).with_name('integration-20261011-batch44.json')
    assert not audit.exists(),'Preserve original transition audit'
    items=[dict(repo='ai_api',method='GET' if action in ['list','detail'] else 'POST',
        path=f'/{app}/goods.Comment/{action}',module='商品评价',terminal=app+'-actual-source-dispatch',
        role='normal-merchant-own-virtual-tenant',risk='owned-comment-edit-soft-delete-or-read',
        scope='ai-primary-seven-owned-tables-zero-money-hidden-order-goods-user',evidence=BASE+'REPORT.md',
        request_type='current-store-client-or-terminal-observed-query-and-form',
        parity='partial-evidence-complete-native-wire-and-original-38-pairs-B16-old-new-body-identical',
        cleanup='18-marker-owned-rows-retained-natural-comment-image-stable-base-five-own-unchanged-workers-auth-released',
        boundary_empty_min_max='partial-evidence-nonempty-image-filter-sort-empty-page-missing-and-cross-tenant-detail-see-report')
        for app in ['store','terminal']for action in ['list','detail','edit','delete']]
    tool.main(items,audit,verify)
