using System.Collections;
using System.Collections.Generic;
using Mirror;
using StateMachine;
using UnityEngine;

namespace Player.States
{
    public class Jump : State<PlayerState>
    {
        private readonly Player _player;
        private static readonly int AnimJump = Animator.StringToHash("Jump");

        public Jump(Player player) : base(PlayerState.Jump)
        {
            _player = player;
        }

        public override void Enter()
        {
            Debug.Log("ENTER");
            _player.animator.SetBool(AnimJump, true);
            _player.playerRigidbody.AddForce(Vector3.up * _player.jumpForce, ForceMode.Impulse);
            _player.StartCoroutine(ResetJumpAnimation());
        }
        
        private IEnumerator ResetJumpAnimation()
        {
            yield return new WaitForSeconds(.2f); // Adjust the delay as needed
            _player.animator.SetBool(AnimJump, false);
        }

        public override void Update()
        {
            if (_player.isGrounded && (Input.GetAxis("Horizontal") != 0f || Input.GetAxis("Vertical") != 0f) && Input.GetKey(KeyCode.LeftShift))
            {
                _player.StateMachine.SetCurrentState(PlayerState.Run);
            }
            else if (_player.isGrounded)
            {
                _player.StateMachine.SetCurrentState(PlayerState.Walk);
            }

            Vector3 velocity = _player.moveDirection * (_player.runSpeed * .5f * Time.deltaTime);
            _player.playerRigidbody.velocity = new Vector3(velocity.x, _player.playerRigidbody.velocity.y, velocity.z);
        }

        public override void Exit()
        {
            // Additional exit logic if needed
        }
    }
}