using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro;

public class SliderDragHandler : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
    public RectTransform sliderBackground; // Assign in Inspector
    public float minValue = 2f;
    public float maxValue = 5f;
    public float slideareaOffsetMultiplier = 0.9f;
    public TMP_Text warningText;
    public float warningThreshholdValue = 0.65f;
    public float CurrentValue { get; private set; }

    public ContinuoslocomotionConfigurator configurator;

    private RectTransform handleRect;
    private Vector2 backgroundStart;
    private float backgroundWidth;

    void Awake()
    {
        handleRect = GetComponent<RectTransform>();

        if (sliderBackground != null)
        {
            backgroundStart = sliderBackground.position;
            backgroundWidth = sliderBackground.rect.width;
        }

    }

    public void OnBeginDrag(PointerEventData eventData)
    {
        UpdateSlider(eventData);
    }

    public void OnDrag(PointerEventData eventData)
    {
        UpdateSlider(eventData);
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        UpdateSlider(eventData);
        configurator.UpdateSpeed(CurrentValue);
    }
    private void UpdateSlider(PointerEventData eventData)
    {
        Vector2 localPoint;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(sliderBackground, eventData.position, eventData.pressEventCamera, out localPoint);

        float halfWidth = sliderBackground.rect.width * 0.5f;



        // Only allow dragging within 90% of the slider width, centered
        float limit = halfWidth * slideareaOffsetMultiplier;
        float clampedX = Mathf.Clamp(localPoint.x, -limit, limit);

        Vector3 newPosition = new Vector3(clampedX, handleRect.localPosition.y, handleRect.localPosition.z);
        handleRect.localPosition = newPosition;

        // Normalize within the limited 90% range
        float normalized = (clampedX + limit) / (limit * 2f);
        //Debug.Log(normalized);
        CurrentValue = Mathf.Lerp(minValue, maxValue, normalized);

        // Displaying the warning.

        if (CurrentValue > (warningThreshholdValue*(maxValue - minValue) + minValue)) warningText.gameObject.SetActive(true);
        
        else warningText.gameObject.SetActive(false);

        //Debug.Log(warningThreshholdValue);

        
    }

}