﻿using System;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

namespace AsmodeeDigital.Common.Samples.UI
{
    [Serializable]
    public class TabToggleTMP : Toggle
    {
        public Color ColorOn;
        public Color ColorOff;
        public TextMeshProUGUI Text;

        private bool _isHighlighted = false;

        protected override void Start()
        {
            base.Start();

            this.onValueChanged.AddListener(OnValueChanged);

            _isHighlighted = isOn;
            RefreshShadowLine();
        }

        private void OnValueChanged(bool value)
        {
            _isHighlighted = value;
            RefreshShadowLine();
        }

#if UNITY_EDITOR
        protected override void OnValidate()
        {
            _isHighlighted = isOn;

            RefreshShadowLine();

            base.OnValidate();
        }
#endif

        private void RefreshShadowLine()
        {
            if (Text != null)
                Text.color = _isHighlighted ? ColorOn : ColorOff;
        }

        public override void OnSelect(BaseEventData eventData)
        {
            base.OnSelect(eventData);

            _isHighlighted = true;
            RefreshShadowLine();
        }

        public override void OnDeselect(BaseEventData eventData)
        {
            base.OnDeselect(eventData);

            _isHighlighted = isOn;
            RefreshShadowLine();
        }

        public override void OnPointerEnter(PointerEventData eventData)
        {
            base.OnPointerEnter(eventData);

            _isHighlighted = true;
            RefreshShadowLine();
        }

        public override void OnPointerExit(PointerEventData eventData)
        {
            base.OnPointerExit(eventData);

            _isHighlighted = isOn;
            RefreshShadowLine();
        }
    }
}
