extends Node2D
class_name SacrificeCircle

@onready var spawner: Spawner = $"Spawner"

## The scene to spawn.
@export var scene_imp: PackedScene


var stones: Array[SacrificeStone]
var sacrifices: Array[Enums.MonsterType]

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	stones = []
	sacrifices = []
	stones.assign(find_children("*", "SacrificeStone", true, false))

	for stone in stones:
		sacrifices.append(stone.current_type)

func refresh_sacrifices() -> void:
	for i in len(stones):
		sacrifices[i] = stones[i].current_type

func try_sacrifice() -> void:
	var first_monster = sacrifices[0]
	var all_same = true
	for m in sacrifices:
		if m != first_monster:
			all_same = false
			break
	if not all_same:
		return

	if first_monster == Enums.MonsterType.Sheep:
		spawn(scene_imp)

func spawn(type: PackedScene) -> void:
	spawner.scene = type
	spawner.spawn()

	for s in stones:
		s.current_monster.queue_free()

func _on_sacrifice_changed(_entity: Node2D, _type: Enums.MonsterType):
	refresh_sacrifices()
	try_sacrifice()