using System;
using UnityEditor.PackageManager;
using UnityEngine;
using UnityEngine.EventSystems;

public class UIManager : MonoBehaviour
{
    [SerializeField] private Animator anim;
    [SerializeField] private EventTrigger OpenerTrigger;
    [SerializeField] private EventTrigger CloseTrigger;

    private bool OpenerIsHovered = false;
    private bool CloseIsHovered = false;

    private bool CurrentShopState = false;

    private void OnEnable()
    {
        // Subscribe to PointerEnter event
        EventTrigger.Entry pointerOpenerEnter = new EventTrigger.Entry();
        pointerOpenerEnter.eventID = EventTriggerType.PointerEnter;
        pointerOpenerEnter.callback.AddListener((data) => { OnOpenerEnter((PointerEventData)data); });
        OpenerTrigger.triggers.Add(pointerOpenerEnter);

        // Subscribe to PointerExit event
        EventTrigger.Entry pointerOpenerExit = new EventTrigger.Entry();
        pointerOpenerExit.eventID = EventTriggerType.PointerExit;
        pointerOpenerExit.callback.AddListener((data) => { OnOpenerExit((PointerEventData)data); });
        OpenerTrigger.triggers.Add(pointerOpenerExit);

        // Subscribe to PointerEnter event
        EventTrigger.Entry pointerCloseTriggerEnter = new EventTrigger.Entry();
        pointerCloseTriggerEnter.eventID = EventTriggerType.PointerEnter;
        pointerCloseTriggerEnter.callback.AddListener((data) => { OnCloseTriggerEnter((PointerEventData)data); });
        CloseTrigger.triggers.Add(pointerCloseTriggerEnter);

        // Subscribe to PointerExit event
        EventTrigger.Entry pointerCloseTriggerExit = new EventTrigger.Entry();
        pointerCloseTriggerExit.eventID = EventTriggerType.PointerExit;
        pointerCloseTriggerExit.callback.AddListener((data) => { OnCloseTriggerExit((PointerEventData)data); });
        CloseTrigger.triggers.Add(pointerCloseTriggerExit);
    }

    private void OnCloseTriggerEnter(PointerEventData data)
    {
        CloseIsHovered = true;
        UpdateShopState();
    }

    private void OnCloseTriggerExit(PointerEventData data)
    {
        CloseIsHovered = false;
        UpdateShopState();
    }

    private void OnOpenerEnter(PointerEventData data)
    {
        OpenerIsHovered = true;
        UpdateShopState();
    }
    private void OnOpenerExit(PointerEventData data)
    {
        OpenerIsHovered = false;
        UpdateShopState();
    }

    private void UpdateShopState()
    {
        CurrentShopState = (CurrentShopState && !CloseIsHovered) || (OpenerIsHovered && !CloseIsHovered);
        anim.SetBool("IsOpen", CurrentShopState);
    }
}