#!/usr/bin/env python3
"""Verify real GBK text export and zero DECIMAL height, retaining the earlier red."""
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 = tool.ROOT.parent / 'worktrees/dm8-compat-20261012/private-prepay-harness/batch177-bodycomp'
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-body-export-fixed-20261013/'


def verify():
    for name, digest in [
        ('manifest.json', 'e395417e83857a0c7997ef8f5d5172969ea31dc73d149bb6df3aa5bd3a2e647e'),
        ('verify_offline.php', 'd52a7dc1176771bab200f39ea41a6f42f119d99fe65dbac07ea852f1485697f6'),
        ('REPORT.md', '99c34bc78829e1313a1df139918330265bc36eacc9d3b64e271a3b7d539cdcdf'),
    ]:
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    result = json.loads(subprocess.check_output(['/opt/homebrew/opt/php@7.4/bin/php', str(PRIVATE / 'verify_offline.php')]))
    assert result['status'] == 'verified' and result['frozen_originals'] == 50
    assert result['formal_business_HTTP_total'] == 4 and result['unexpected_DML'] == result['DDL'] == 0
    pairs = {phase: [] for phase in ('positive', 'zero')}
    for lane in ('B', 'C'):
        pre = json.loads((PRIVATE / (lane + '-preflight.json' if lane == 'B' else 'C-177-preflight.json')).read_text())
        ai = json.loads((PRIVATE / (lane + '-ai-prepared.json')).read_text())
        for phase in pairs:
            raw = (PRIVATE / (lane + '-bodycomp-' + phase + '.raw')).read_bytes()
            fields = raw.decode('gbk').split('|')
            expected = [str(ai['readback']['user_id']), pre['fixture']['staff_name'], '2', '1990-02-03',
                '172.00' if phase == 'positive' else '0.00']
            assert fields == expected
            fields[0], fields[1] = '{own_ai_id}', '{own_test_name}'
            pairs[phase].append(fields)
    assert all(b == c for b, c in pairs.values())
    for name, digest in [
        ('application/p/controller/Staff.php', '10249d4fc7d548fcb4457542b57eaceaf4d5b7ae1f0332884729c36fc0576a95'),
        ('tests/Staff/BodyCompositionTextContractTest.php', 'bfd35415e6a9fd6a5c2dc97f60ef73ec4cbafb93522ada40ee52fb152fed8646'),
        ('tests/Staff/body_composition_text_contract.php', 'c53dda5f6fba2a4696eb3b51e8d592639371b72ef73b7e6564a0d37e1c43d17e'),
    ]:
        assert hashlib.sha256((tool.source_root('store') / name).read_bytes()).hexdigest() == digest


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch177.json'
    assert not audit.exists()
    specs = [item('store', 'GET', '/p/staff/bodyCompositionTest', BASE,
        risk='fresh-owned-staff-GBK-text-export-positive-and-zero-height',
        readback='tested-pass-all-five-GBK-segments-own-source-and-Staff-AIUser-Actor-full-rows-unchanged',
        success_case='partial-evidence-real-download-height172-and-zero-both-engines',
        parity='partial-evidence-GBK-contract-source-matched-height-fixed-scale-zero-preserved',
        boundary_empty_min_max='partial-evidence-zero-height-keeps-0.00-common-Chinese-lossless',
        cleanup='own-disabled-AIUser-and-hidden-Staff-retained-no-natural-data-or-external-changes')]
    tool.main(specs, audit, verify)
