using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DCSoft.Writer.Data;
namespace DocumentManagement
{
    public partial class frmKB : Form
    {
        public frmKB()
        {
            InitializeComponent();
        }
        /// 
        /// 刷新知识库
        /// 
        public void RefreshKB()
        {
            //DocumentDAL.LoadKBLibaray();
            tvwKB.Nodes.Clear();
            DocumentDAL.LoadKBLibaray();
            tvwKB.KBLibrary = DocumentDAL.Lib;
            tvwKB.RefreshView();
            tvwKB.ExpandAll();
        }
        private void btnClear_Click(object sender, EventArgs e)
        {
            txtName.Text = "";
            txtName.Tag = null;
            txtParentName.Text = "";
            txtParentName.Tag = null;
            dgvItems.Rows.Clear();
            rtbSQL.Text = "";
            txtReflection.Text = "";
        }
        /// 
        /// 新建同级节点
        /// 
        /// 
        /// 
        private void 新建目录ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tvwKB.SelectedNode == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            btnClear_Click(null, null);
            if (tvwKB.SelectedNode.Parent != null)
            {
                txtParentName.Tag = (KBEntry)tvwKB.SelectedNode.Parent.Tag;
                txtParentName.Text = tvwKB.SelectedNode.Parent.Text;
            }
            else
            {
                txtParentName.Text = "无";
            }
        }
        /// 
        /// 新建子节点
        /// 
        /// 
        /// 
        private void 添加子目录ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tvwKB.SelectedNode == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            btnClear_Click(null, null);
            txtParentName.Tag = (KBEntry)tvwKB.SelectedNode.Tag;
            txtParentName.Text = tvwKB.SelectedNode.Text;
        }
        /// 
        /// 节点上移
        /// 
        /// 
        /// 
        private void 上移ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tvwKB.SelectedNode == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            if (tvwKB.SelectedNode.PrevNode == null)
            {
                MessageBox.Show("当前节点已是第一节点!");
                return;
            }
            TreeNode Node = tvwKB.SelectedNode;
            TreeNode PreNode = Node.PrevNode;
            TreeNode NewNode = (TreeNode)Node.Clone();
            if (Node.Parent == null)
            {
                tvwKB.Nodes.Insert(PreNode.Index, NewNode);
            }
            else
            {
                Node.Parent.Nodes.Insert(PreNode.Index, NewNode);
            }
            Node.Remove();
            tvwKB.SelectedNode = NewNode;
            RefreshOrders(NewNode);
        }
        /// 
        /// 节点下移
        /// 
        /// 
        /// 
        private void 下移ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tvwKB.SelectedNode == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            if (tvwKB.SelectedNode.NextNode == null)
            {
                MessageBox.Show("当前节点已是末节点!");
                return;
            }
            TreeNode Node = tvwKB.SelectedNode;
            TreeNode NextNode = Node.NextNode;
            TreeNode NewNode = (TreeNode)Node.Clone();
            if (Node.Parent == null)
            {
                tvwKB.Nodes.Insert(NextNode.Index + 1, NewNode);
            }
            else
            {
                Node.Parent.Nodes.Insert(NextNode.Index + 1, NewNode);
            }
            Node.Remove();
            tvwKB.SelectedNode = NewNode;
            RefreshOrders(NewNode);
        }
        private void RefreshOrders(TreeNode node)
        {
            TreeNode pNode = node.Parent;
            List ls = new List();
            if (pNode == null)
            {
                for (int i = 0; i < this.tvwKB.Nodes.Count; i++)
                {
                    ls.Add(tvwKB.Nodes[i].Name);
                }
            }
            else
            {
                for (int i = 0; i < pNode.Nodes.Count; i++)
                {
                    ls.Add(pNode.Nodes[i].Name);
                }
            }
            if (ls.Count > 0)
            {
                DocumentDAL.SetOrders(ls);
            }
        }
        private void btnReflection_Click(object sender, EventArgs e)
        {
            if (DocumentDAL.Vw_Info == "")
            {
                MessageBox.Show("视图名无效!");
                return;
            }
            frmViewSelect frmViewSelect = new frmViewSelect();
            frmViewSelect.EntryId = ((KBEntry)txtName.Tag) == null ? string.Empty : ((KBEntry)txtName.Tag).ID;
            frmViewSelect.FormClosing += new FormClosingEventHandler(frmViewSelect_FormClosing);
            frmViewSelect.ShowDialog();
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (txtName.Text.Trim() == "")
            {
                MessageBox.Show("请输入节点名称!");
                return;
            }
            if (this.rdReflection.Checked == true && txtReflection.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("请选择视图映射列!");
                return;
            }
            KBEntry entry = new KBEntry() { Value = "" };
            entry.ID = "KB" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
            entry.Text = txtName.Text.Trim();
            entry.ParentID = txtParentName.Tag == null ? null : ((KBEntry)txtParentName.Tag).ID;
            //entry.SpellCode = txtReflection.Text;
            //判断是List还是ListSQL
            if (rdSQL.Checked == true)
            {
                entry.Style = KBEntryStyle.ListSQL;
                entry.Value = rtbSQL.Text.Trim();
            }
            else if (this.rdList.Checked == true)
            {
                entry.Style = KBEntryStyle.List;
                entry.ListItems = new ListItemCollection();
                foreach (DataGridViewRow row in dgvItems.Rows)
                {
                    if (row.Index != dgvItems.NewRowIndex)
                    {
                        ListItem item = new ListItem();
                        item.Text = Convert.ToString(row.Cells[0].Value);
                        item.Value = Convert.ToString(row.Cells[1].Value);
                        entry.ListItems.Add(item);
                    }
                }
            }
            else if (this.rdReflection.Checked == true)
            {
                entry.Style = KBEntryStyle.List;
                entry.Text2 = txtReflection.Text;
            }
            //判断添加还是修改
            try
            {
                if (txtName.Tag == null)
                {
                    DocumentDAL.InsertEntry(entry);
                    RefreshKB();
                    MessageBox.Show("添加成功!");
                    btnClear_Click(null, null);
                }
                else
                {
                    entry.ID = ((KBEntry)txtName.Tag).ID;
                    DocumentDAL.UpdateEntry(entry);
                    RefreshKB();
                    MessageBox.Show("修改成功!");
                    btnClear_Click(null, null);
                }
                DocumentDAL.LoadKBLibaray();
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }
        private void frmViewSelect_FormClosing(object sender, FormClosingEventArgs e)
        {
            string vcName = ((frmViewSelect)sender).VcName;
            if (!vcName.Equals(string.Empty))
            {
                txtReflection.Text = vcName;
            }
        }
        private void frmKB_Load(object sender, EventArgs e)
        {
            RefreshKB();
        }
        private void tvwKB_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                contextMenuStrip2.Show(Control.MousePosition.X, Control.MousePosition.Y);
            }
        }
        private void rd_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton rd = sender as RadioButton;
            if (rd.Checked)
            {
                if (rd == rdReflection)
                {
                    panel6.Visible = true;
                    dgvItems.Visible = false;
                    rtbSQL.Visible = false;
                }
                else
                {
                    panel6.Visible = false;
                    if (rd == rdSQL)
                    {
                        rtbSQL.Visible = true;
                        dgvItems.Visible = false;
                    }
                    else
                    {
                        rtbSQL.Visible = false;
                        dgvItems.Visible = true;
                    }
                }
            }
        }
        private void tvwKB_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            btnClear_Click(null, null);
            if (tvwKB.SelectedNode == null)
            {
                return;
            }
            KBEntry entry = (KBEntry)tvwKB.SelectedNode.Tag;
            if (tvwKB.SelectedNode.Parent != null)
            {
                txtParentName.Tag = (KBEntry)tvwKB.SelectedNode.Parent.Tag;
                txtParentName.Text = tvwKB.SelectedNode.Parent.Text;
            }
            else
            {
                txtParentName.Text = "无";
            }
            txtName.Text = entry.Text;
            txtName.Tag = entry;
            //判断节点的Style
            if (entry.Style == KBEntryStyle.List && entry.ListItems != null && entry.ListItems.Count > 0)
            {
                rdList.Checked = true;
                foreach (ListItem item in entry.ListItems)
                {
                    dgvItems.Rows.Add(item.Text, item.Value);
                }
            }
            else if (entry.Style == KBEntryStyle.ListSQL)
            {
                rdSQL.Checked = true;
                rtbSQL.Text = entry.Value;
            }
            else if (entry.Text2 != null)
            {
                this.rdReflection.Checked = true;
                txtReflection.Text = entry.Text2.ToString();
            }
        }
        private void btnSelect_Click(object sender, EventArgs e)
        {
            frmParentSelect frmParentSelect = new frmParentSelect(tvwKB);
            frmParentSelect.FormClosing += new FormClosingEventHandler(frmParentSelect_FormClosing);
            frmParentSelect.ShowDialog();
        }
        private void frmParentSelect_FormClosing(object sender, FormClosingEventArgs e)
        {
            txtParentName.Tag = ((frmParentSelect)sender).entry;
            txtParentName.Text = ((frmParentSelect)sender).entry == null ? "无" : ((frmParentSelect)sender).entry.Text;
        }
        private void btnDel_Click(object sender, EventArgs e)
        {
            if (txtName.Tag == null)
            {
                MessageBox.Show("请选择一个节点!");
                return;
            }
            if (MessageBox.Show("删除节点将导致某些数据无法显示列表,是否继续?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                DocumentDAL.DeleteEntry(((KBEntry)txtName.Tag).ID);
                btnClear_Click(null, null);
                RefreshKB();
                MessageBox.Show("删除成功!");
            }
        }
    }
}