#!/usr/bin/env python3
"""Copy only own synthetic response/source and hash-only report artifacts, never credentials."""
import hashlib
import json
import pathlib
import shutil
import sys
from verify import load, verify

bdir, cdir = map(pathlib.Path, sys.argv[1:3])
root = pathlib.Path(__file__).resolve().parent
b, c = load(bdir), load(cdir)
results = verify(b, c)
manifest = {}
retention = {}
for lane, source in [('B', bdir), ('C', cdir)]:
    target = root/'evidence'/lane
    target.mkdir(parents=True, exist_ok=True)
    for base in ['report', 'responses', 'source', 'resource-cleanup']:
        src = source/(base+'-private.json')
        dst = target/(base+'.json')
        # Byte copy preserves original JSON objects/arrays/scalars, not parse/re-encode.
        shutil.copyfile(src, dst)
        manifest[str(dst.relative_to(root))] = {'bytes': dst.stat().st_size, 'sha256': hashlib.sha256(dst.read_bytes()).hexdigest()}
    fixture = json.loads((source/'fixture-private.json').read_bytes())
    retention[lane] = {'marker': fixture['seed']['marker'], 'ids': fixture['ids'],
        'staff_uuid': fixture['seed']['staff'], 'department_uuid': fixture['seed']['department'],
        'date': fixture['seed']['date'], 'retained': fixture['retained'], 'meal_updates': fixture['meal_updates'],
        'final_meal_type': fixture['own_rows_final']['initial_menu']['meal_type'],
        'fund_fields_zero': fixture['fund_fields_zero'],
        'staff_hidden_disabled': all(fixture['own_rows_final']['staff'][key] == 0 for key in ['status','job_status','is_show']),
        'department_hidden_disabled': all(fixture['own_rows_final']['department'][key] == 0 for key in ['status','is_show']),
        'dish_disabled': fixture['own_rows_final']['dishes']['status'] == 0,
        'real_files_created': 0, 'user_permissions_modified': 0}
diag = json.loads((bdir/'snapshot-diagnostic-private.json').read_bytes())
drift = {'initial_staff_snapshot_red': diag['diff']['staff'],
    'later_global_observations': json.loads((bdir/'b-recovery-global-observation-private.json').read_bytes()),
    'final_global_menu_count_observation': b['report']['initial_menu_global_count_telemetry'],
    'responsibility': 'unknown', 'natural_staff_rolled_back': False, 'natural_rows_modified_by_this_batch': False,
    'consumed_owned_relations_unchanged': b['report']['consumed_source_unchanged'], 'global_unchanged_claimed': False}
for name, obj in [('B_GLOBAL_DRIFT.json', drift), ('RETENTION.json', retention), ('results.json', results), ('MANIFEST.json', manifest)]:
    (root/name).write_text(json.dumps(obj, ensure_ascii=False, indent=2)+'\n')
print(json.dumps({'verified': results['status'], 'copied_files': len(manifest), 'paired_cases': results['paired_positive_cases']}))
