using Godot;

public partial class DeathScreen : TextureRect
{
	public static DeathScreen Instance { get; private set; }

	[Export] public GameCamera Camera;

	private Timer _timer;
	private TextureRect _playerSprite;
	private TextureRect _monsterSprite;

	public override void _Ready()
	{
		Instance = this;
		
		Visible = false;

		_timer = (Timer)FindChild("Timer");
		_playerSprite = (TextureRect)FindChild("PlayerSprite");
		_monsterSprite = (TextureRect)FindChild("MonsterSprite");
	}

	public void Timeout()
	{
		GD.Print("Timer end");
		
		GetTree().ReloadCurrentScene();
	}

	public void Killed(Node2D killer)
	{
		GD.Print($"DeathScreen {killer is null}");
		
		_playerSprite.Position = Player.Instance.Position - Camera.Position + Constants.HalfScreenSize;
		_monsterSprite.Position = killer.Position - Camera.Position + Constants.HalfScreenSize;

		if (Player.Instance.FindChild("AnimatedSprite2D") is AnimatedSprite2D animatedSprite2D)
		{
			GD.Print("Found AnimatedSprite2D for Player");
			_playerSprite.Texture =
				animatedSprite2D.SpriteFrames.GetFrameTexture(animatedSprite2D.Animation, animatedSprite2D.Frame);
			_playerSprite.Position -= _playerSprite.Texture.GetSize() / 2;
			_playerSprite.FlipH = animatedSprite2D.FlipH;
		}

		if (killer.FindChild("AnimatedSprite2D") is AnimatedSprite2D killerAnimatedSprite2D)
		{
			GD.Print("Found AnimatedSprite2D for Monster");
			_monsterSprite.Texture =
				killerAnimatedSprite2D.SpriteFrames.GetFrameTexture(killerAnimatedSprite2D.Animation, killerAnimatedSprite2D.Frame);
			_monsterSprite.Position -= _monsterSprite.Texture.GetSize() / 2;
			_monsterSprite.FlipH = killerAnimatedSprite2D.FlipH;
		}

		Visible = true;
		_timer.Start();
		
		GD.Print("Timer start");
	}
}