#!/usr/bin/env python3
"""Independent offline audit of the once-executed Food schema repair journal."""
from pathlib import Path
import hashlib
import json
import sys

BASE = Path(__file__).resolve().parents[3] / 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-store-food-crud3-20261011/food-date-root-runner-20261011'
RAW = Path('/Users/wiscourper/Documents/workspace/local/dm8-food-formal-root-evidence-20261011.TawKME/events.jsonl')
EXPECTED = '6698223f94c593ff089a6fd93a01a93f029bce4ff9c2d9150c51ed7d0f120a85'
N = 0

def check(value, message):
    global N
    N += 1
    assert value, message

def same(a, b):
    if type(a) is not type(b):
        return False
    if isinstance(a, dict):
        return list(a) == list(b) and all(same(a[k], b[k]) for k in a)
    if isinstance(a, list):
        return len(a) == len(b) and all(same(x, y) for x, y in zip(a, b))
    return a == b

def lines(file):
    with file.open() as stream:
        for line in stream:
            yield json.loads(line)

plan = json.loads((BASE / 'plan.json').read_text())
check(hashlib.sha256((BASE / 'plan.json').read_bytes()).hexdigest() == 'de97e490c867ef7bbbaacce80470a225b124be62771e2c52e3f4468a516d3391', 'Frozen plan')
check(RAW.is_file() and not RAW.is_symlink() and RAW.stat().st_mode & 0o777 == 0o600, 'Private original journal')
check(hashlib.sha256(RAW.read_bytes()).hexdigest() == EXPECTED, 'Complete original journal bytes')
old = list(lines(BASE / 'private/date-before62.jsonl'))
maps = list(lines(BASE / 'private/date-map0.jsonl'))
check(len(old) == len(maps) == 2338, 'Complete original row and date map sets')
sent = []
results = []
row_counts = {}
phases = []
final = None
for event in lines(RAW):
    kind = event['event']
    check('STOPPED' not in kind, 'No stopped/unknown outcome hidden')
    if kind == 'append-before':
        statement = event['statement']
        ordinal = statement['ordinal']
        check(same(statement, plan['steps'][ordinal - 1]), 'Exact literal SQL and native bind plan')
        check(ordinal == len(sent) + 1, 'Once-only ordered statements')
        sent.append(ordinal)
    elif kind == 'original-stream-row':
        ordinal = event['ordinal']
        step = plan['steps'][ordinal - 1]
        index = row_counts.get(ordinal, 0)
        check(index < 2338, 'No extra original rows')
        if step['label'] == 'map0':
            check(same(event['row'], maps[index]['map']) and same(event['native_types'], maps[index]['native_types']), 'Original native ID/date mapping unchanged')
        else:
            expected = dict(old[index]['row'])
            if step['phase'] != 'pre':
                for key in ['create_time', 'update_time']:
                    original = maps[index]['map'][key + '_old']
                    check(original.endswith('.000000') and original == maps[index]['map'][key + '_zero'], 'Only approved zero-fraction source dates')
                    expected[key] = original[:19]
            check(same(event['row'], expected), 'All62 native original values; only two approved date presentation changes')
            check(same(event['native_types'], old[index]['native_types']), 'All62 original PDO native types')
        row_counts[ordinal] = index + 1
    elif kind in ['original-read-result', 'original-DDL-result']:
        ordinal = event['statement']['ordinal']
        check(same(event['statement'], plan['steps'][ordinal - 1]), 'Original result paired with literal SQL')
        check(event['errorInfo'][0] == '00000', 'Native SQL success')
        results.append(ordinal)
    elif kind == 'protected-phase':
        phases.append(event['phase'])
        check(event['state'][event['phase']] is True, 'Full real protection phase')
    elif kind == 'complete':
        final = event
check(sent == results == list(range(1, 49)), 'Exactly48 sent/result pairs, no replay')
check(len(row_counts) == 9 and set(row_counts.values()) == {2338}, 'Nine complete streamed rowsets')
check(phases == ['pre', 'after_alter', 'after_trigger'], 'Three protected phases in order')
check(final['state'] == dict(cursor=48, read=46, DDL=2, pre=True, after_alter=True, after_trigger=True), 'Final original ledger')
check(final['DML'] == final['HTTP'] == final['Auth'] == 0, 'No natural business mutation or request')
print(json.dumps(dict(status='ROOT_INDEPENDENT_FOOD_FORMAL_JOURNAL_VERIFIED', checks=N,
    journal_sha256=EXPECTED, original_rows=2338, streamed_rowsets=9, SQL_read=46, DDL=2,
    DML=0, HTTP=0, API_acceptance=False, whole62_native_rows_and_other60_unchanged=True)))
