using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HSUI.Helpers
{
    public class SmoothHPHelper
    {
        private float? _startHp;
        private float? _targetHp;
        private float? _lastHp;

        public void Reset()
        {
            _startHp = null;
            _targetHp = null;
            _lastHp = null;
        }

        public uint GetNextHp(int currentHp, int maxHp, float velocity)
        {
            if (!_startHp.HasValue || !_targetHp.HasValue || !_lastHp.HasValue)
            {
                _lastHp = currentHp;
                _startHp = currentHp;
                _targetHp = currentHp;
            }

            if (currentHp != _lastHp)
            {
                _startHp = _lastHp;
                _targetHp = currentHp;
            }

            if (_startHp.HasValue && _targetHp.HasValue)
            {
                float delta = _targetHp.Value - _startHp.Value;
                float offset = delta * velocity / 100f;
                _startHp = Math.Clamp(_startHp.Value + offset, 0, maxHp);
            }

            _lastHp = currentHp;
            return _startHp.HasValue ? (uint)_startHp.Value : (uint)currentHp;
        }
    }
}
