# Explicit client selection for new graph compositions, preserving the original default CLI.
import argparse
from pathlib import Path
from hearth.persistence import export_scene, semantic_digest
from hearth_extensions.programs import extension_scene, branching_campus, perimeter_cluster

PROGRAMS = {'campus': branching_campus, 'perimeter': perimeter_cluster}


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('program', choices=PROGRAMS)
    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/extensions/composition.litematic'))
    args = parser.parse_args()
    scene = extension_scene(PROGRAMS[args.program], args.seed, args.environment_seed)
    export_scene(scene, args.output)
    print(args.output, semantic_digest(scene), len(scene.blocks), 'blocks', len(scene.nodes), 'instances')


if __name__ == '__main__':
    main()
