using Godot;
using Mr.BrickAdventures;
using Mr.BrickAdventures.Autoloads;

namespace Mr.BrickAdventures.scripts.UI;

public partial class GameOverScreen : Control
{
    [Export] public Control GameOverPanel { get; set; }
    [Export] public Button RestartButton { get; set; }
    [Export] public Button MainMenuButton { get; set; }
    [Export] public PackedScene MainMenuScene { get; set; }

    public override void _Ready()
    {
        RestartButton.FocusMode = Control.FocusModeEnum.All;
        MainMenuButton.FocusMode = Control.FocusModeEnum.All;

        RestartButton.Pressed += OnRestartClicked;
        MainMenuButton.Pressed += OnMainMenuClicked;

        if (InputDeviceManager.Instance != null)
            InputDeviceManager.Instance.DeviceChanged += OnDeviceChanged;
    }

    public override void _ExitTree()
    {
        if (InputDeviceManager.Instance != null)
            InputDeviceManager.Instance.DeviceChanged -= OnDeviceChanged;
    }

    private void OnDeviceChanged(int device)
    {
        var d = (InputDeviceManager.InputDevice)device;
        if (d != InputDeviceManager.InputDevice.Mouse && GameOverPanel.IsVisibleInTree())
            RestartButton.GrabFocus();
    }

    private void OnMainMenuClicked()
    {
        GameStateStore.Instance?.ResetAll();
        GetTree().ChangeSceneToPacked(MainMenuScene);
    }

    private void OnRestartClicked()
    {
        GameManager.Instance?.RestartGame();
    }

    public void OnPlayerDeath()
    {
        if (GameStateStore.Instance?.Player.Lives != 0) return;

        GameOverPanel.Show();
        if (InputDeviceManager.Instance?.IsPointerless == true)
            RestartButton.GrabFocus();
    }
}