extends Node3D

const ConstructRoomMesh = preload ("res://lib/utils/mesh/construct_room_mesh.gd")

const material_selected = preload ("../room_selected.tres")
const material_unselected = preload ("../room_unselected.tres")

@onready var door_button = $Button
@onready var delete_button = $DeleteButton
@onready var door_label = $Label3D
@onready var rooms_map = $Rooms
@onready var doors_map = $Doors

var editing_door = R.state(false)

func _ready():
	rooms_map.selectable.value = false

	var button_icon = R.computed(func(_arg):
		if doors_map.selected_door.value == null:
			return "add"
		elif editing_door.value == false:
			return "edit"
		else:
			return "save"
	)

	R.bind(door_button, "label", button_icon)

	var button_label = R.computed(func(_arg):
		if doors_map.selected_door.value == null:
			return "Add Door"
		elif editing_door.value == false:
			return "Edit Door"
		else:
			return "Save Door"
	)

	R.bind(door_label, "text", button_label)

	R.effect(func(_arg):
		delete_button.disabled=doors_map.selected_door.value == null
		delete_button.visible=doors_map.selected_door.value != null
	)

	door_button.on_button_up.connect(func():
		if doors_map.selected_door.value == null:
			var id=App.house.doors.add()
			editing_door.value=true
			doors_map.selected_door.value=id
		elif editing_door.value == false:
			editing_door.value=true
			App.house.doors.edit(doors_map.selected_door.value)
		else:
			App.house.doors.save()
			editing_door.value=false
	)

	delete_button.on_button_up.connect(func():
		if doors_map.selected_door.value != null:
			App.house.doors.delete(doors_map.selected_door.value)
			doors_map.selected_door.value=null
	)