using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mesnac.Action.Base;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using Mesnac.Basic;
using Mesnac.Codd.Session;
using System.Data;

namespace Mesnac.Action.Default.Purview
{
    /// <summary>
    /// 设置默认权限项
    /// 创建人:郑立兵
    /// 创建时间:2014-6-07
    /// 说明:实现勾选不受权限控制的有节点项
    /// </summary>
    public class SetDefaultPurviewAction : DatabaseAction, IAction
    {
        public void Run(RuntimeParameter runtime)
        {
            base.RunIni(runtime);

            ICSharpCode.Core.LoggingService<SetDefaultPurviewAction>.Debug("设置默认权限");
            DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePermission").FirstOrDefault();
            if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView)))
            {
                ICSharpCode.Core.LoggingService<SetDefaultPurviewAction>.Warn("权限树初始化勾选 缺少权限树形控件...");
                return;
            }
            TreeView tv = basRolePurviewControl.BaseControl as TreeView;
            if (tv != null)
            {
                try
                {
                    DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource);
                    if (dbhelper == null)
                    {
                        return;
                    }
                    dbhelper.ClearParameter();
                    dbhelper.CommandType = CommandType.Text;
                    dbhelper.CommandText = "SELECT * FROM BasDefaultPermission";
                    DataTable dt = dbhelper.ToDataTable();
                    if (dt == null)
                    {
                        ICSharpCode.Core.LoggingService<SetDefaultPurviewAction>.Warn("默认权限为null...");
                        return;
                    }

                    ClearTreeNodes(tv.Nodes);
                    foreach (DataRow dr in dt.Rows)
                    {
                        CheckTreeNode(tv.Nodes, dr["PermissionType"].ToString() + dr["PermissionItemGUID"].ToString());
                    }
                }
                catch (Exception ex)
                {
                    ICSharpCode.Core.LoggingService<SetDefaultPurviewAction>.Error("设置默认权限失败:" + ex.Message, ex);
                    runtime.IsReturn = true;
                    return;
                }
            }
        }

        private void ClearTreeNodes(TreeNodeCollection tnc)
        {
            foreach (TreeNode n in tnc)
            {
                n.Checked = false;
                if (n.Nodes != null)
                {
                    ClearTreeNodes(n.Nodes);
                }
            }
        }

        private void CheckTreeNode(TreeNodeCollection tnc, string NodeName)
        {
            foreach (TreeNode n in tnc)
            {
                if (n.Nodes != null && n.Nodes.Count > 0)
                {
                    foreach (TreeNode childNode in n.Nodes)
                    {
                        if (childNode.Name == NodeName && childNode.Checked == false)
                        {
                            childNode.Checked = true;
                        }
                    }
                }
                else
                {
                    if (n.Name == NodeName && n.Checked == false)
                    {
                        n.Checked = true;
                    }
                }
            }
        }
    }
}