using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;

namespace FineUIPro.Web.SysManage
{
    public partial class SystemMenuSet : PageBase
    {

        /// <summary>
        /// 加载页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetButtonPower();
                this.ckMenuType.DataTextField = "Text";
                this.ckMenuType.DataValueField = "Value";
                this.ckMenuType.DataSource = BLL.DropListService.Sys_Menu_Type();
                this.ckMenuType.DataBind();

                /// 加载菜单树
                this.InitMenuTree(String.Join(", ", this.ckMenuType.SelectedValueArray));
            }
        }
       


        #region Tab2
        /// <summary>
        ///  菜单类型选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ckMenuType_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            this.InitMenuTree(String.Join(", ", this.ckMenuType.SelectedValueArray));
        }

        #region 初始化树
        /// <summary>
        /// 初始化树
        /// </summary>
        /// <param name="menuList">菜单集合</param>
        private void InitMenuTree(string menuType)
        {
            this.tvMenu.Nodes.Clear();
            var menus = BLL.SysMenuService.GetMenuListByMenuType(menuType);
            if (menus.Count() > 0)
            {
                TreeNode rootNode = new TreeNode
                {
                    Text = "菜单",
                    NodeID = "0",
                    EnableCheckBox = true,
                    EnableCheckEvent = true,
                    Expanded = true
                };
                this.tvMenu.Nodes.Add(rootNode);
                this.BoundTree(rootNode.Nodes, menus, rootNode.NodeID);
            }
        }

        /// <summary>
        /// 遍历增加子节点
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="menuId"></param>
        private void BoundTree(TreeNodeCollection nodes, List<Model.Sys_Menu> sysMenus, string superMenuId)
        {
            var menus = sysMenus.Where(x => x.SuperMenu == superMenuId).OrderBy(x => x.SortIndex);
            if (menus.Count() > 0)
            {
                foreach (var item in menus)
                {
                    TreeNode chidNode = new TreeNode
                    {
                        Text = item.MenuName,
                        NodeID = item.MenuId,
                        EnableCheckBox = true,
                        EnableCheckEvent = true
                    };
                     if (item.IsUsed == true)
                    {
                        chidNode.Checked = true;
                        chidNode.Expanded = true;
                        chidNode.Selectable = true;                    
                    }

                    nodes.Add(chidNode);
                    if (!item.IsEnd.HasValue || item.IsEnd == false)
                    {
                        this.BoundTree(chidNode.Nodes, sysMenus, item.MenuId);
                    }
                }
            }
        }
        #endregion

        #region 全选、全不选
        /// <summary>
        /// 全选、全不选
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvMenu_NodeCheck(object sender, FineUIPro.TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                this.tvMenu.CheckAllNodes(e.Node.Nodes);
                SetCheckParentNode(e.Node);
            }
            else
            {
                this.tvMenu.UncheckAllNodes(e.Node.Nodes);
            }
        }

        /// <summary>
        /// 选中父节点
        /// </summary>
        /// <param name="node"></param>
        private void SetCheckParentNode(TreeNode node)
        {
            if (node.ParentNode != null && node.ParentNode.NodeID != "0")
            {
                node.ParentNode.Checked = true;
                if (node.ParentNode.ParentNode.NodeID != "0")
                {
                    SetCheckParentNode(node.ParentNode);
                }
            }
        }
        #endregion

        #region Tab2保存按钮
        /// <summary>
        /// Tab2保存按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnTab2Save_Click(object sender, EventArgs e)
        {
            string menuTyp = String.Join(", ", this.ckMenuType.SelectedValueArray);
            if (!string.IsNullOrEmpty(menuTyp))
            {
                BLL.SysMenuService.SetAllIsUsed(menuTyp);
                TreeNode[] nodes = this.tvMenu.GetCheckedNodes();

                if (nodes.Length > 0)
                {
                    foreach (TreeNode tn in nodes)
                    {
                        if (tn.NodeID != "0")
                        {
                            if (BLL.RolePowerService.IsExistMenu(tn.NodeID))
                            {
                                var menu = Funs.DB.Sys_Menu.FirstOrDefault(x => x.MenuId == tn.NodeID);
                                if (menu != null)
                                { 
                                    menu.IsUsed=true;

                                    BLL.SysMenuService.UpdateSys_Menu(menu);
                                }
                                 
                            }                       
                        }
                    }
                }

                 ShowNotify("保存成功!", MessageBoxIcon.Success);
            }
        }
        #endregion
        #endregion

        #region 按钮权限
        /// <summary>
        /// 获取按钮权限
        /// </summary>
        /// <param name="button"></param>
        /// <returns></returns>
        private void GetButtonPower()
        {
            if (this.CurrUser.Account=="hfnbd")
            {
                this.btnTreeMenuEdit.Hidden = false;
                this.btnTreeMenuMove.Hidden = false;
                this.btnTab2Save.Hidden = false;
            }

            //if (this.CurrUser.UserId == BLL.Const.sysglyId)
            //{
            //    this.btnRefresh.Hidden = false;
            //    this.btnRefresh1.Hidden = false;
            //}
        }
        #endregion

        protected void btnTreeMenuEdit_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("SystemMenuSetEdit.aspx?MenuId={0}", this.tvMenu.SelectedNodeID, "编辑 - ")));

        }

        protected void btnTreeMenuMove_Click(object sender, EventArgs e)
        {
            if (this.tvMenu.SelectedNodeID=="0")
            {
                Alert.ShowInParent("暂不支持根节点迁移!", MessageBoxIcon.Warning);
                return;
            }
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("SystemMenuSetMove.aspx?MenuId={0}", this.tvMenu.SelectedNodeID, "编辑 - ")));

        }
    }
}