extends SceneTree

# Capture temporaire (07/10, phase 8F) : une salle du donjon sous l'IA-slop, pour
# que l'auteur juge le rendu. Copie réduite de tools/dev/capture_rooms.gd : en
# fenêtre, APPDATA isolé, autoloads pris par l'arbre (aucun preload de script du
# jeu). Arguments après « -- » : le dossier de sortie, la salle, x, y.

func _initialize() -> void:
	call_deferred("_run")

func _run() -> void:
	var args := OS.get_cmdline_user_args()
	var out_dir: String = args[0]
	var room_id: String = args[1]
	var at := Vector2(float(args[2]), float(args[3]))
	for _i: int in 5:
		await process_frame
	var dungeon: Node2D = load("res://scenes/dungeon/dungeon.tscn").instantiate() as Node2D
	root.add_child(dungeon)
	current_scene = dungeon
	for _i: int in 20:
		await process_frame
	var game_state: Node = root.get_node("GameState")
	var bridge: Node = root.get_node("Bridge3D")
	var catalog: Script = load("res://scripts/core/data_catalog.gd")
	game_state.call("set_scoped_value", "run", "room_id", room_id)
	game_state.call("set_scoped_value", "run", "level", int((catalog.get("ROOMS") as Dictionary).get(room_id, {}).get("level", 1)))
	dungeon.call("_leave_room")
	dungeon.call("_clear_room_contents")
	dungeon.call("_enter_room")
	dungeon.call("_spawn_wave")
	game_state.call("set_fact_value", "world_is_corrupt", true)
	var player: Node2D = dungeon.get("player")
	player.set("invulnerability", 999.0)
	for step: int in 90:
		await process_frame
		player.global_position = at
		if paused or step % 6 == 0:
			_tap(KEY_SPACE)
	# Les bêtes figées là où elles sont : on regarde, on ne se bat pas.
	for beast: Node in get_nodes_in_group("enemy"):
		beast.set_physics_process(false)
	var camera: Node = dungeon.get_node_or_null("Bridge3D/Camera3D")
	if camera != null:
		camera.call("snap")
	for _i: int in 10:
		await process_frame
	print("SLOP STATE ", bridge.call("slop_state"))
	root.get_viewport().get_texture().get_image().save_png(out_dir.path_join("slop_beasts.png"))
	bridge.call("slop_decor_now")
	bridge.call("slop_burst_now")
	for _i: int in 3:
		await process_frame
	print("SLOP STATE ", bridge.call("slop_state"))
	root.get_viewport().get_texture().get_image().save_png(out_dir.path_join("slop_burst.png"))
	quit(0)

func _tap(key: Key) -> void:
	for pressed: bool in [true, false]:
		var event := InputEventKey.new()
		event.keycode = key
		event.physical_keycode = key
		event.pressed = pressed
		Input.parse_input_event(event)
