using System;
using XGame.Framework.Interfaces;

namespace XGame.Framework.UI
{
    /// <summary>
    /// UI对象的管理接口
    /// 管理UIPanel,UIController,UIViewModel等
    /// </summary>
    public interface IUIView : IUpdate, ILateUpdate
    {
        /// <summary>
        /// Panel实例
        /// </summary>
        IUIPanel Panel { get; }
        /// <summary>
        /// 激活状态
        /// </summary>
        bool Active { get; }
        /// <summary>
        /// 激活
        /// </summary>
        void Enable(object intent = null);
        /// <summary>
        /// 隐藏
        /// </summary>
        void Disable();
    }
    /// <summary>
    /// UIView适配器
    /// </summary>
    public interface IUIViewAdapter
    {
        /// <summary>
        /// Context对应的UIKey
        /// 业务不要赋值
        /// </summary>
        public UIKey Key { set; }
        /// <summary>
        /// UIView的UIControllerGroup对象
        /// </summary>
        public IUIControllerGroup CtrlGroup { get; set; }
        /// <summary>
        /// 构建NestedView
        /// </summary>
        /// <typeparam name="TNestedView"></typeparam>
        /// <param name="nested"></param>
        /// <param name="isStatic">是否是静态的(其他预制的子节点)</param>
        /// <returns></returns>
        TNestedView CreateNested<TNestedView>(IUINested nested, bool isStatic) where TNestedView : class, INestedView;
        /// <summary>
        /// 构建NestedView
        /// </summary>
        /// <param name="nestedViewType">TNestedView : class, INestedView</param>
        /// <param name="nested"></param>
        /// <param name="isStatic">是否是静态的(其他预制的子节点)</param>
        /// <returns></returns>
        INestedView CreateNested(Type nestedViewType, IUINested nested, bool isStatic);
    }
}
