using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.common.SysManage
{
    public partial class RolePower : PageBase
    {
        #region 加载
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InitTreeMenu();
            }
        }
        #endregion
        #region 查询
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            this.InitTreeMenu();
        }
        #endregion
        #region 加载树
        private void InitTreeMenu()
        {
            this.tvRole.Nodes.Clear();
            TreeNode rootRole = new TreeNode();
           // if (this.GetLanguage == "zh-CN")
           // {
           //     rootRole.Text = "角色";
           // }
           //else
           // { 
                rootRole.Text = "Roles";
            //}
            rootRole.NodeID = "0";
            rootRole.Expanded = true;
            this.tvRole.Nodes.Add(rootRole);
            BoundTree(rootRole.Nodes);
        }
        /// 
        /// 遍历节点
        /// 
        /// 
        /// 
        /// 
        private void BoundTree(TreeNodeCollection nodes)
        {
            List roles = BLL.Sys_RoleService.GetRoleList();
            if (!string.IsNullOrEmpty(this.txtRoleName.Text))
            {
                roles = roles.Where(e => e.RoleName.Contains(this.txtRoleName.Text.Trim())).ToList();
            }
            if (roles.Count() > 0)
            {
                TreeNode tn = null;
                foreach (var q in roles)
                {
                    tn = new TreeNode();
                    tn.Text = q.RoleName;
                    tn.NodeID = q.RoleId;
                    tn.ToolTip = q.Def;
                    tn.EnableClickEvent = true;
                    nodes.Add(tn);
                }
            }
        }
        #endregion
        #region Tree点击事件
        /// 
        /// 选择角色事件
        /// 
        /// 
        /// 
        protected void tvRole_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            var role = BLL.Sys_RoleService.GetRole(this.tvRole.SelectedNodeID);
            if (role != null)
            {
                this.lblRoleName.Text = "Role:" + role.RoleName;
            }
            this.BindGrid();
        }
        #endregion
        #region BindGrid
        private void BindGrid()
        {
            string strSql = "";
            //string strSql = @"SELECT MenuId,MenuName,SuperMenu FROM dbo.Sys_Menu
            //                  ORDER BY SortIndex";
            //if (this.GetLanguage == "en-US")
            //{
                strSql = @"SELECT MenuId,MenuEnName AS MenuName,SuperMenu FROM dbo.Sys_Menu                              
                              ORDER BY SortIndex";
            //}
            List parms = new List();
            //parms.Add(new SqlParameter("@MenuModule", this.drpMenuModule.SelectedValue));
            //SqlParameter[] parameter = parms.ToArray();
            DataTable dt = SQLHelper.GetDataTableRunText(strSql, null);
            Grid1.DataSource = dt;
            Grid1.DataBind();
        }
        #endregion        
        #region Grid点击事件
        protected void Grid1_RowDataBound(object sender, GridRowEventArgs e)
        {
            System.Web.UI.WebControls.CheckBoxList cblButtonPower = (System.Web.UI.WebControls.CheckBoxList)(this.Grid1.Rows[e.RowIndex].FindControl("cblButtonPower"));
            string menuId = e.Row.RowID;
            var menu = from x in Funs.DB.Sys_Menu where x.MenuId == menuId select x;
            if (menu != null && menu.Count() > 0)
            {
                var b = from x in Funs.DB.Sys_ButtonToMenu where x.MenuId == menu.First().MenuId orderby x.SortIndex select x;
                if (b != null && b.Count() > 0)
                {
                    //cblButtonPower.DataTextField = "ButtonName";
                    //if (this.GetLanguage == "en-US")
                    //{
                    cblButtonPower.DataTextField = "ButtonEnName";
                    //}
                    cblButtonPower.DataValueField = "ButtonToMenuId";
                    cblButtonPower.DataSource = b.ToList();
                    cblButtonPower.DataBind();
                }
                if (tvRole.SelectedNode != null && tvRole.SelectedNodeID != "0")
                {
                    //                    var power = from x in Funs.DB.Sys_RolePower
                    //                                where x.MenuId == menu.First().MenuId
                    //&& x.RoleId == tvRole.SelectedNodeID
                    //                                select x;
                    //                    if (power != null && power.Count() > 0)
                    //                    {
                    //                        for (int i = 0; i < cblButtonPower.Items.Count; i++)
                    //                        {
                    //                            if (power.First().ButtonToMenus.Contains(cblButtonPower.Items[i].Value))
                    //                            {
                    //                                cblButtonPower.Items[i].Selected = true;
                    //                            }
                    //                        }
                    //                    }
                    var power = (from x in Funs.DB.Sys_ButtonPower
                                 where x.MenuId == menu.First().MenuId
                                 && x.RoleId == tvRole.SelectedNodeID
                                 select x).ToList();
                    for (int i = 0; i < power.Count; i++)
                    {
                        for (int j = 0; j < cblButtonPower.Items.Count; j++)
                        {
                            if (power[i].ButtonToMenuId == cblButtonPower.Items[j].Value)
                            {
                                cblButtonPower.Items[j].Selected = true;
                            }
                        }
                    }
                }
            }
        }
        #endregion
        #region 保存
        /// 
        /// 保存按钮事件
        /// 
        /// 
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (tvRole.SelectedNode == null || tvRole.SelectedNodeID == "0")
            {
                Alert.ShowInTop("Please select a role!", MessageBoxIcon.Warning);
                return;
            }
            //Model.EProjectDB db = Funs.DB;
            //var power = from x in db.Sys_RolePower
            //            join y in db.Sys_Menu on x.MenuId equals y.MenuId
            //            where x.RoleId == tvRole.SelectedNodeID
            //            select x;
            //db.Sys_RolePower.DeleteAllOnSubmit(power);
            //db.SubmitChanges();
            //for (int i = 0; i < this.Grid1.Rows.Count; i++)
            //{
            //    string buttonToMenuIds = string.Empty;
            //    System.Web.UI.WebControls.CheckBoxList cblButtonPower = (System.Web.UI.WebControls.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblButtonPower"));
            //    if (cblButtonPower.SelectedItem != null)
            //    {
            //        foreach (System.Web.UI.WebControls.ListItem item in cblButtonPower.Items)
            //        {
            //            if (item.Selected)
            //            {
            //                buttonToMenuIds += item.Value + ",";
            //            }
            //        }
            //        if (!string.IsNullOrEmpty(buttonToMenuIds))
            //        {
            //            buttonToMenuIds = buttonToMenuIds.Substring(0, buttonToMenuIds.LastIndexOf(","));
            //        }
            //        string newKeyID = SQLHelper.GetNewID(typeof(Model.Sys_RolePower));
            //        Model.Sys_RolePower newPower = new Model.Sys_RolePower();
            //        newPower.RolePowerId = newKeyID;
            //        newPower.RoleId = tvRole.SelectedNodeID;
            //        newPower.MenuId = Grid1.DataKeys[i][0].ToString();
            //        newPower.ButtonToMenus = buttonToMenuIds;
            //        db.Sys_RolePower.InsertOnSubmit(newPower);
            //        db.SubmitChanges();
            //        string supMenuId = Grid1.DataKeys[i][1].ToString();
            //        InsertSuperMenu(supMenuId, tvRole.SelectedNodeID);
            //    }
            //}
            var power = from x in Funs.DB.Sys_ButtonPower
                        join y in Funs.DB.Sys_Menu on x.MenuId equals y.MenuId
                        where x.RoleId == tvRole.SelectedNodeID
                        select x;
            Funs.DB.Sys_ButtonPower.DeleteAllOnSubmit(power);
            Funs.DB.SubmitChanges();
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                System.Web.UI.WebControls.CheckBoxList cblButtonPower = (System.Web.UI.WebControls.CheckBoxList)(this.Grid1.Rows[i].FindControl("cblButtonPower"));
                if (cblButtonPower.SelectedItem != null)
                {
                    foreach (System.Web.UI.WebControls.ListItem item in cblButtonPower.Items)
                    {
                        if (item.Selected)
                        {
                            Model.Sys_ButtonPower newPower = new Model.Sys_ButtonPower();
                            newPower.ButtonPowerID = SQLHelper.GetNewID(typeof(Model.Sys_ButtonPower));
                            newPower.RoleId = tvRole.SelectedNodeID;
                            newPower.MenuId = Grid1.DataKeys[i][0].ToString();
                            newPower.ButtonToMenuId = item.Value;
                            Funs.DB.Sys_ButtonPower.InsertOnSubmit(newPower);
                            Funs.DB.SubmitChanges();
                        }
                    }
                    string supMenuId = Grid1.DataKeys[i][1].ToString();
                    InsertSuperMenu(supMenuId, tvRole.SelectedNodeID);
                }
            }
            ShowNotify("Role permissions set successfully!");
            BLL.Sys_LogService.AddLog(this.CurrUser.UserId, "Role permission Settings");
        }
        private void InsertSuperMenu(string supMenuId, string roleId)
        {
            Model.EProjectDB db = Funs.DB;
            var menuPower = from x in db.Sys_ButtonPower where x.RoleId == roleId && x.MenuId == supMenuId select x;
            if (menuPower.Count() == 0 && supMenuId != "0")
            {
                string newKeyID = SQLHelper.GetNewID(typeof(Model.Sys_ButtonPower));
                Model.Sys_ButtonPower newPower = new Model.Sys_ButtonPower();
                newPower.ButtonPowerID = newKeyID;
                newPower.RoleId = roleId;
                newPower.MenuId = supMenuId;
                db.Sys_ButtonPower.InsertOnSubmit(newPower);
                db.SubmitChanges();
                var menu = from x in db.Sys_Menu where x.MenuId == supMenuId select x;
                if (menu.Count() > 0)
                {
                    InsertSuperMenu(menu.First().SuperMenu, roleId);
                }
            }
        }
        #endregion
    }
}