# A short composition of long shared roofs, a rear upper wing and glazed lightwells.
import argparse
from pathlib import Path
from hearth.randomness import Scope
from hearth.components import Blueprint, RoomSpec, FacadeDesign, InteriorDesign, RidgeLantern
from hearth.components.roofcraft import RoofDesign
from hearth.lodges import lodge_scene
from hearth.persistence import export_scene


def lantern_house(seed):
    rng = Scope(seed).stream('lantern-house-layout')
    rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen'), RoomSpec(0, 1, 0, 'library')]
    frontage = rng.choice((2, 3))
    if frontage == 3:
        rooms.append(RoomSpec(2, 0, 0, 'workshop'))
    if rng.choice((False, True)):
        rooms.append(RoomSpec(1, 1, 0, 'storage'))
    for level in range(1, rng.choice((2, 3))):
        rooms.append(RoomSpec(0, 1, level, 'bedroom' if level == 1 else 'library'))
    roof = RoofDesign(rng.choice(((1, 2), (2, 1))), rng.choice((7, 10)), end_hips=rng.choice(((0, 0), (0, 2), (2, 2))), ridge_component=RidgeLantern(rng.choice((5, 7, 9))), ridge_min_run=17)
    return Blueprint(tuple(rooms), bay=rng.choice((11, 13)), roof_axis='x', roof_design=roof, attic_purpose=rng.choice(('bedroom', 'library')), porch_bays=frontage, porch_depth=5, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', interior_design=InteriorDesign())


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