using UnityEngine;

public class ShowOnClickWithManager : MonoBehaviour
{
    [Tooltip("UI панель, которая будет показываться/скрываться")]
    public GameObject uiPanel;

    [Tooltip("Смещение панели относительно объекта в мировых координатах")]
    public Vector3 worldOffset = new Vector3(0, 1.5f, 0);

    private RectTransform panelRectTransform;
    private Canvas canvas;

    void Start()
    {
        if (uiPanel != null)
        {
            panelRectTransform = uiPanel.GetComponent<RectTransform>();
            canvas = uiPanel.GetComponentInParent<Canvas>();
            uiPanel.SetActive(false);
        }
    }

    void OnMouseDown()
    {
        if (uiPanel == null) return;

        // Если эта панель уже открыта - закрываем её через менеджер
        if (uiPanel.activeSelf)
        {
            TooltipManager.CloseCurrentTooltip();
            return;
        }

        // Показываем новую панель через менеджер
        Vector3 worldPosition = transform.position + worldOffset;
        Vector3 screenPosition = Camera.main.WorldToScreenPoint(worldPosition);
        
        uiPanel.SetActive(true);
        PositionPanel(screenPosition);
        
        TooltipManager.ShowTooltip(uiPanel, this, screenPosition);
    }

    void PositionPanel(Vector3 screenPosition)
    {
        if (canvas.renderMode == RenderMode.ScreenSpaceOverlay || 
            canvas.renderMode == RenderMode.ScreenSpaceCamera)
        {
            panelRectTransform.position = screenPosition;
            ClampPanelToScreenBounds();
        }
        else if (canvas.renderMode == RenderMode.WorldSpace)
        {
            panelRectTransform.position = transform.position + worldOffset;
        }
    }

    void ClampPanelToScreenBounds()
    {
        Vector2 panelSize = panelRectTransform.sizeDelta;
        Vector3 panelPosition = panelRectTransform.position;
        
        float screenWidth = Screen.width;
        float screenHeight = Screen.height;
        
        Vector2 pivot = panelRectTransform.pivot;
        
        float minX = panelSize.x * pivot.x;
        float maxX = screenWidth - panelSize.x * (1 - pivot.x);
        float minY = panelSize.y * pivot.y;
        float maxY = screenHeight - panelSize.y * (1 - pivot.y);
        
        float clampedX = Mathf.Clamp(panelPosition.x, minX, maxX);
        float clampedY = Mathf.Clamp(panelPosition.y, minY, maxY);
        
        panelRectTransform.position = new Vector3(clampedX, clampedY, panelPosition.z);
    }
}