using UnityEngine;
using UnityEngine.UI;

namespace Pursuit.Code.ExtensionMethods
{
    public static class ScrollRectExtensionMethods
    {
        public static void SnapTo(this ScrollRect scroller, RectTransform child)
        {
            Canvas.ForceUpdateCanvases();

            var contentPos = (Vector2)scroller.transform.InverseTransformPoint(scroller.content.position);
            var childPos = (Vector2)scroller.transform.InverseTransformPoint(child.position);
            Vector2 endPos = contentPos - childPos;
            // If no horizontal scroll, then don't change contentPos.x
            if (!scroller.horizontal) endPos.x = contentPos.x;
            // If no vertical scroll, then don't change contentPos.y
            if (!scroller.vertical) endPos.y = contentPos.y;
            scroller.content.position = scroller.transform.TransformPoint(endPos);

            Vector2 goalPos = scroller.normalizedPosition;

            goalPos.x = Mathf.Clamp01(goalPos.x);
            goalPos.y = Mathf.Clamp01(goalPos.y);

            scroller.normalizedPosition = goalPos;
        }
    }
}