@icon("res://composants/objets/brique/IconeConteneurBriques.svg")
class_name ConteneurDeBriques
extends Node2D


signal plus_de_briques

## Permet de bouger le grougpe de briques au fil du temps.
## Doit etre un script de type Mouvement
@export var mouvement_script: GDScript

var _mouvement: Mouvement

@onready var nombre_enfants: int = get_children().size()


func _ready() -> void:
	_branche_comptage_briques()
	_initie_mouvement()


func _branche_comptage_briques():
	for node: Node in get_children():
		assert(node is Brique or node is ConteneurDeBriques, "Ne peut contenir que des briques")
		if node is Brique:
			var brique: Brique = node as Brique
			brique.eclatee.connect(_quand_enfant_detruit)
		elif node is ConteneurDeBriques:
			var contenant: ConteneurDeBriques = node as ConteneurDeBriques
			contenant.plus_de_briques.connect(_quand_enfant_detruit)


func _initie_mouvement():
	if mouvement_script == null:
		return

	assert(mouvement_script.can_instantiate(), "Doit pouvoir etre mis en mouvement")
	var mouvement: Object = mouvement_script.new()

	assert(mouvement is Mouvement, "Mauvais type du script, mouvement attendu")
	_mouvement = mouvement as Mouvement


func _physics_process(delta: float) -> void:
	if _mouvement == null:
		return

	_mouvement.bouger(self, delta)


func _quand_enfant_detruit() -> void:
	nombre_enfants -= 1
	if nombre_enfants <= 0:
		plus_de_briques.emit()
