using UnityEngine;

public class PlayerActionDash : IPlayerAction
{
    private PlayerController player;
    private float duration = 0.25f; // 대시 유지 시간
    private float timer; // 대시 경과 시간
    private Vector3 direction; // 대시 방향

    private float dashSpeedMultiplier = 3f; // 기본 이동 속도의 n배
    private float dashSpeed; // 실제 대시 속도(계산한 값)

    public bool IsActive { get; private set; } // 현재 대시 중인지 여부

    public void StartAction(PlayerController player)
    {
        this.player = player;
        IsActive = true;
        timer = 0f;

        // 조이스틱 입력값 있으면 그 방향, 없으면 캐릭터가 바라보는 방향
        direction = player.GetMoveDirectionOrForward().normalized;

        // 대시 속도 = 이동 속도 x 배수
        dashSpeed = player.moveSpeed * dashSpeedMultiplier;

        // TODO: 필요 시 애니메이션 재생
        // player.PlayerAnimator.SetTrigger("Roll");
    }

    public void UpdateAction()
    {
        if (!IsActive) return;

        DoDash();
    }

    private void DoDash()
    {
        timer += Time.deltaTime;
        if (timer < duration)
        {
            player.CharacterController.Move(direction * dashSpeed * Time.deltaTime);
        }
        else
        {
            EndAction();
        }
    }

    public void EndAction()
    {
        IsActive = false;
        player.OnActionEnded(this); // player 에서도 action 초기화
        player = null;
    }
}