using System;
using FairyGUI.Utils;

namespace FairyGUI
{
    /// <summary>
    /// Gear is a connection between object and controller.
    /// </summary>
    public class GearDisplay : GearBase
    {
        /// <summary>
        /// Pages involed in this gear.
        /// </summary>
        public string[] pages { get; set; }

        int _visible;
        uint _displayLockToken;

        public GearDisplay(GObject owner)
            : base(owner)
        {
            _displayLockToken = 1;
        }

        override protected void AddStatus(string pageId, ByteBuffer buffer)
        {
        }

        override protected void Init()
        {
            pages = null;
        }

        override public void Apply()
        {
            _displayLockToken++;
            if (_displayLockToken == 0)
                _displayLockToken = 1;

            if (pages == null || pages.Length == 0
                || Array.IndexOf(pages, _controller.selectedPageId) != -1)
                _visible = 1;
            else
                _visible = 0;
        }

        override public void UpdateState()
        {
        }

        public uint AddLock()
        {
            _visible++;
            return _displayLockToken;
        }

        public void ReleaseLock(uint token)
        {
            if (token == _displayLockToken)
                _visible--;
        }

        public bool connected
        {
            get { return _controller == null || _visible > 0; }
        }
    }
}