# Repeatable bounded seed audit with observed structural diversity and full diagnostics.
import argparse
import importlib
import json
from pathlib import Path

from hearthwright import generate
from scripts.sample_batch import CLIENTS


def main():
    """Audit a finite consecutive seed corpus without producing temporary schematics."""
    parser = argparse.ArgumentParser()
    parser.add_argument('--count', type=int, default=64)
    parser.add_argument('--start', type=int, default=0)
    parser.add_argument('--report', type=Path, default=Path('samples/audit.json'))
    args = parser.parse_args()
    if not 1 <= args.count <= 256:
        parser.error('count must be 1..256 for a bounded audit')
    result = {'seeds': list(range(args.start, args.start + args.count)), 'clients': {}, 'failures': []}
    for client in CLIENTS:
        design = importlib.import_module('examples.' + client).DESIGN
        structures, geometries = set(), set()
        for seed in result['seeds']:
            try:
                building = generate(design, seed)
                structures.add(building.metadata['structural_signature'])
                geometries.add(building.metadata['geometry_signature'])
            except Exception as exc:
                result['failures'].append({'client': client, 'seed': seed, 'error': str(exc)})
                print(f'FAILED {client} seed={seed}: {exc}', flush=True)
        result['clients'][client] = {'observed_structures': len(structures), 'observed_geometry_signatures': len(geometries)}
        print(f'{client}: audited {args.count} seeds', flush=True)
    args.report.parent.mkdir(parents=True, exist_ok=True)
    args.report.write_text(json.dumps(result, indent=2, sort_keys=True) + '\n')
    if result['failures']:
        raise SystemExit(1)


if __name__ == '__main__':
    main()
