using System;
using System.Linq;
using System.Threading.Tasks;
using Godot;
using KarrotStarterTemplate.Common.StateMachines.Custom.PlayerStateMachines;

namespace KarrotStarterTemplate.Entities.Player.States;

[GlobalClass]
public partial class RollState : RootMotionBasePlayerState
{
    protected async override Task OnEnter()
    {
        await base.OnEnter();
        checkRelevance = false;
    }

    protected override async Task OnExit()
    {
        await base.OnExit();
    }

    protected override void OnAnimationNotify(string name, string actionName)
    {
        if (name == "roll" && actionName == "finish")
        {
            checkRelevance = true;
        }
    }


    protected override void OnStateProcess(double delta)
    {
        base.OnStateProcess(delta);
        
        if (package.GetBool("roll") && timeElapsed > 0.4)
        {
            statesInQueue.Add(id == "Roll" ? "DoubleRoll" : "Roll");
        }
    }

    protected override void OnStatePhysicsProcess(double delta)
    {
        if (package.GetString("roll") == "finish")
        {

        }

        base.OnStatePhysicsProcess(delta);
    }

    protected override string OnCheckRelevance()
    {
        if (statesInQueue.Count > 0) return statesInQueue.Last();
        
        if (!package.GetVector3("move_direction").IsZeroApprox())
        {
            if (package.GetBool("run"))
            {
                return "Run";
            }

            return "Walk";
        }

        return "Idle";

    }
}