# Inspect real extension structures and verify the same public queries after reload.
import argparse
import json
from pathlib import Path
import hearth_extensions
from hearth.persistence import load_scene, export_scene


def inspect(source, seed, output):
    scene = load_scene(source)
    if scene.seed != seed:
        raise ValueError('Explicit seed must match input artifact')
    queries = []
    for tag in ('deck', 'window', 'fixture'):
        candidate = next((n for n in scene.nodes.values() if n.capability and tag in n.capability.tags and scene.cells(n.path)), None)
        if candidate is None:
            continue
        point = min(scene.cells(candidate.path))
        queries.append({'tag': tag, 'query': scene.inspect(point), 'exact_cell_count': len(scene.cells(candidate.path)), 'descendant_cell_count': len(scene.cells(candidate.path, True))})
    export_scene(scene, output)
    restored = load_scene(output)
    for entry in queries:
        assert restored.inspect(entry['query']['position']) == entry['query']
        assert len(restored.cells(entry['query']['instance'])) == entry['exact_cell_count']
    print(json.dumps({'source': str(source), 'seed': seed, 'verified_after_reload': True, 'queries': queries}, default=lambda v: sorted(v), indent=2))


if __name__ == '__main__':
    p = argparse.ArgumentParser()
    p.add_argument('--seed', type=int, default=0)
    p.add_argument('--input', type=Path, required=True)
    p.add_argument('--output', type=Path, default=Path('samples/extensions/inspection.litematic'))
    a = p.parse_args()
    inspect(a.input, a.seed, a.output)
