using UnityEngine;

public class OutlineManager : MonoBehaviour
{
    private Outliner currentOutliner;

    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        float minDistance = Mathf.Infinity;
        Outliner closestOutliner = null;

        foreach (Outliner outliner in FindObjectsOfType<Outliner>())
        {
            if (IsRayIntersectingRenderer(ray, outliner, out float distance) && distance < minDistance)
            {
                minDistance = distance;
                closestOutliner = outliner;
            }
        }

        if (closestOutliner != currentOutliner)
        {
            RemoveOutline();
            currentOutliner = closestOutliner;
            currentOutliner?.EnableOutline();
        }
    }

    private bool IsRayIntersectingRenderer(Ray ray, Outliner outliner, out float distance)
    {
        distance = Mathf.Infinity;
        Renderer renderer = outliner.GetRenderer();
        if (renderer == null) return false;

        Bounds bounds = renderer.bounds;
        return bounds.IntersectRay(ray, out distance);
    }

    private void RemoveOutline()
    {
        if (currentOutliner != null)
        {
            currentOutliner.DisableOutline();
            currentOutliner = null;
        }
    }
}