# Query real glass ownership and related structures before and after paired persistence.
import argparse
import json
from pathlib import Path
from hearth.lodges import hillside_home, lodge_scene
from hearth.persistence import export_scene, load_scene, semantic_digest
from hearth.blocks import name_of


def inspect(seed, environment_seed, output):
    scene = lodge_scene(hillside_home(seed), seed, environment_seed)
    windows = [n for n in scene.nodes.values() if 'sealed-opening' in scene.view.capability(n.path).tags]
    coordinates = sorted(p for node in windows for p in scene.cells(node.path) if name_of(scene.blocks[p].state) == 'glass')
    point = next(p for p in coordinates if any('roof' in scene.view.capability(n['id']).tags for n in scene.inspect(p)['chain']))
    query = scene.inspect(point)
    cells = scene.cells(query['instance'])
    export_scene(scene, output)
    restored = load_scene(output)
    assert restored.inspect(point) == query and restored.cells(query['instance']) == cells
    return {'seed': seed, 'environment_seed': environment_seed, 'world_coordinate': point, 'query': query, 'exact_current_cells': sorted(cells), 'reloaded_query_matches': True, 'digest': semantic_digest(restored)}


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--seed', type=int, default=0)
    parser.add_argument('--environment-seed', type=int, default=0)
    parser.add_argument('--output', type=Path, default=Path('samples/building-quality/inspection.litematic'))
    args = parser.parse_args()
    print(json.dumps(inspect(args.seed, args.environment_seed, args.output), default=lambda value: sorted(value), indent=2))
