# A new lightweight room-graph composition: inhabited wings around an open garden.
import argparse
from pathlib import Path
from hearth.randomness import Scope
from hearth.components import Blueprint, RoomSpec, FacadeDesign
from hearth.components.roofcraft import RoofDesign
from hearth.lodges import lodge_scene
from hearth.persistence import export_scene


def garden_house(seed):
    rng = Scope(seed).stream('garden-house-plan')
    rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'library'),
             RoomSpec(2, 0, 0, 'workshop'), RoomSpec(0, 1, 0, 'kitchen'),
             RoomSpec(2, 1, 0, 'storage')]
    for x in rng.sample((0, 2), rng.choice((1, 2))):
        rooms.append(RoomSpec(x, 0, 1, 'bedroom'))
    if rng.choice((False, True)):
        rooms.append(RoomSpec(2, 2, 0, 'library'))
    balcony = any((r.x, r.z, r.level) == (0, 0, 1) for r in rooms)
    return Blueprint(tuple(rooms), bay=rng.choice((11, 13)), roof_axis=rng.choice(('auto', 'z')),
                     roof_design=RoofDesign(rng.choice(((1, 2), (1, 1, 2))), 9),
                     porch_depth=4, balcony=balcony, chimney=True,
                     facade_design=FacadeDesign(), rail_material='dark_oak')


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('garden-house.litematic'))
    args = parser.parse_args()
    export_scene(lodge_scene(garden_house(args.seed), args.seed, args.environment_seed), args.output)
