extends ConfirmationDialog

var texture : ImageTexture
var aux_img : Image
var layer : Image

func _ready() -> void:
	texture = ImageTexture.new()
	texture.flags = 0
	aux_img = Image.new()
	$VBoxContainer/HBoxContainer2/OptionButton.add_item("Rotxel")
	$VBoxContainer/HBoxContainer2/OptionButton.add_item("Upscale, Rotate and Downscale")
	$VBoxContainer/HBoxContainer2/OptionButton.add_item("Nearest neighbour")

func set_sprite(sprite : Image) -> void:
	aux_img.copy_from(sprite)
	layer = sprite
	texture.create_from_image(aux_img, 0)
	$VBoxContainer/TextureRect.texture = texture


func _on_HSlider_value_changed(_value) -> void:
	rotate()
	$VBoxContainer/HBoxContainer/SpinBox.value = $VBoxContainer/HBoxContainer/HSlider.value


func _on_SpinBox_value_changed(_value):
	$VBoxContainer/HBoxContainer/HSlider.value = $VBoxContainer/HBoxContainer/SpinBox.value


func _on_RotateImage_confirmed() -> void:
	Global.canvas.handle_undo("Draw")
	match $VBoxContainer/HBoxContainer2/OptionButton.text:
		"Rotxel":
			Global.rotxel(layer,$VBoxContainer/HBoxContainer/HSlider.value*PI/180)
		"Nearest neighbour":
			Global.nn_rotate(layer,$VBoxContainer/HBoxContainer/HSlider.value*PI/180)
		"Upscale, Rotate and Downscale":
			Global.fake_rotsprite(layer,$VBoxContainer/HBoxContainer/HSlider.value*PI/180)
	Global.canvas.handle_redo("Draw")
	$VBoxContainer/HBoxContainer/HSlider.value = 0

func rotate() -> void:
	var sprite : Image = Image.new()
	sprite.copy_from(aux_img)
	match $VBoxContainer/HBoxContainer2/OptionButton.text:
		"Rotxel":
			Global.rotxel(sprite,$VBoxContainer/HBoxContainer/HSlider.value*PI/180)
		"Nearest neighbour":
			Global.nn_rotate(sprite,$VBoxContainer/HBoxContainer/HSlider.value*PI/180)
		"Upscale, Rotate and Downscale":
			Global.fake_rotsprite(sprite,$VBoxContainer/HBoxContainer/HSlider.value*PI/180)
	texture.create_from_image(sprite, 0)


func _on_OptionButton_item_selected(_id) -> void:
	rotate()


func _on_RotateImage_about_to_show() -> void:
	$VBoxContainer/HBoxContainer/HSlider.value = 0