namespace VRTK.Examples.PanelMenu
{
    // Panel Menu UI Slider

    using UnityEngine;
    using UnityEngine.UI;
    using VRTK;

    /// <summary>
    ///  Demo component for example scene.
    /// </summary>
    /// <example>
    /// See the demo scene for a complete example: [ 040_Controls_Panel_Menu ] 
    /// </example>
    public class PanelMenuUISlider : MonoBehaviour
    {
        #region Variables

        private Slider slider;

        #endregion Variables

        #region Unity Methods

        private void Start()
        {
            slider = GetComponent<Slider>();
            if (slider == null)
            {
                VRTK_Logger.Warn(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "PanelMenuUISlider", "Slider", "the same"));
                return;
            }

            GetComponentInParent<VRTK_PanelMenuItemController>().PanelMenuItemSwipeLeft += new PanelMenuItemControllerEventHandler(OnPanelMenuItemSwipeLeft);
            GetComponentInParent<VRTK_PanelMenuItemController>().PanelMenuItemSwipeRight += new PanelMenuItemControllerEventHandler(OnPanelMenuItemSwipeRight);
        }

        #endregion Unity Methods

        #region UI Events

        private void OnPanelMenuItemSwipeLeft(object sender, PanelMenuItemControllerEventArgs e)
        {
            slider.value -= 1;
            SendMessageToInteractableObject(e.interactableObject);
        }

        private void OnPanelMenuItemSwipeRight(object sender, PanelMenuItemControllerEventArgs e)
        {
            slider.value += 1;
            SendMessageToInteractableObject(e.interactableObject);
        }

        private void SendMessageToInteractableObject(GameObject interactableObject)
        {
            interactableObject.SendMessage("UpdateSliderValue", slider.value);
        }

        #endregion UI Events
    }
}