using UnityEngine;

namespace UNSLOW.EffectPractice.FirstTerm.Gauges
{
    [ExecuteAlways]
    public class WorldToCanvasFollower : MonoBehaviour
    {
        [SerializeField] private Transform target;
        [SerializeField] private Vector3 worldOffset;
        [SerializeField] private Camera worldCamera;
        [SerializeField] private Camera uiCamera;
        [SerializeField] private RectTransform canvasRect;
        [SerializeField] private RectTransform uiRect;

        private void LateUpdate()
        {
            if (target == null)
                return;

            if (worldCamera == null)
                worldCamera = Camera.main;

            if (worldCamera == null)
                return;
            var worldPosition = target.position + worldOffset;
            var screenPoint =
                worldCamera.WorldToScreenPoint(worldPosition);

            var visible = screenPoint.z > 0f;
            uiRect.gameObject.SetActive(visible);

            if (!visible)
                return;

            RectTransformUtility.ScreenPointToLocalPointInRectangle(
                canvasRect,
                screenPoint,
                uiCamera,
                out var localPoint);

            uiRect.anchoredPosition = localPoint;
        }
    }
}
