using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DSWeb.EntityDA;
using DSWeb.Models;
using JsonHelper;
using System.Xml;

namespace DSWeb.ParameterSet
{
    public partial class CodeGoodsSet : System.Web.UI.Page
    {
        T_ALL_DA T_ALL_DA = new T_ALL_DA();

        //grid
        private string strColumnVal;
        public string strUserID;//用户GID
        private string strType = "50";//Grid模块号
        //gridEnd

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["USERID"] != null)
            {
                strUserID = Session["USERID"].ToString().Trim();
            }
            else
            {
                Server.Transfer("~/Error/FriendError.aspx");
                return;
                //strUserID = ""; 
            }
            //
            //grid
            if (!IsPostBack)
            {
            }
            if (hid_setting.Value.Trim() != "")
            {
                strColumnVal = hid_setting.Value.Trim();
                SaveColumnSetting(strColumnVal);
                hid_setting.Value = "";
            }
            if (hid_header.Value.Trim() != "")
            {
                strColumnVal = hid_header.Value.Trim();
                SaveColumnSetting(strColumnVal);
                hid_header.Value = "";
            }
            //gridEnd    
        }

        protected void btDel_Click(object sender, EventArgs e)
        {
            if (this.hid_id.Value.Trim() != "")
            {
                string strGID = this.hid_id.Value.Trim();
                strGID = strGID.Replace(",","','");
                strGID = "'" + strGID + "'";
                bool bl = T_ALL_DA.GetExecuteSqlCommand("delete from code_goods where GID in (" + strGID.Trim() + ")");
                if (bl)
                {
                    //Response.Write("<script>alert('删除成功!');history.back();</script>");
                    return;
                }
                else
                {
                    Response.Write("<script>alert('删除失败!');history.back();</script>");
                    return;
                }
            }
        }

        #region Grid参数
        private void SaveColumnSetting(string tempColumnVal)
        {

            JsonColumnGroupEntity jsonColumnGroupEntity = GetPostEntity(tempColumnVal);
            List<JsonColumnEntity> jsonColumnEntities = new List<JsonColumnEntity>();

            UserSettingDA userSettingDA = new UserSettingDA();

            UserSettingEntity userSettingEntity = userSettingDA.GetUserSettingByUserIDType(strUserID, strType);

            if (userSettingEntity.GID != null)
            {
                userSettingEntity.ModifiedUser = strUserID;

                GridEntity gridEntity = null;


                List<GridColumnEntity> gridColumnEntities = new List<GridColumnEntity>();
                gridEntity = GetSettingXml(userSettingEntity.Xml);
                gridEntity.PagePreCount = jsonColumnGroupEntity.ShowCount;

                foreach (JsonColumnEntity jColumn in jsonColumnGroupEntity.JsonColumnEntities)
                {
                    foreach (GridColumnEntity gColumn in gridEntity.Columns)
                    {
                        if (gColumn.Description.Equals(jColumn.col3))
                        {
                            gColumn.Description = jColumn.col3;
                            gColumn.Width = jColumn.col5;
                            gColumn.Index = jColumn.col4;
                            if (jColumn.col6 != -1)
                            {
                                gColumn.VisibleState = jColumn.col6;
                            }
                            //gridColumnEntities.Add(gColumn);
                            break;
                        }
                    }


                }
                //Columns
                //gridEntity.Columns = gridColumnEntities;

                userSettingEntity.Xml = SaveUserSetting(gridEntity).OuterXml;
                int iResult = userSettingDA.UpdateUserSetting(userSettingEntity);

            }
            else
            {
                if (jsonColumnGroupEntity != null)
                {
                    userSettingEntity = new UserSettingEntity();

                    userSettingEntity.GID = Guid.NewGuid().ToString();
                    userSettingEntity.Name = "CodeGoodsSetGridSetting";
                    userSettingEntity.Description = "品名Grid设置";
                    userSettingEntity.UserID = strUserID;
                    userSettingEntity.Type = 1;//type值为1表示Grid
                    string strRequestUrl = Request.Url.ToString();
                    string strUrl = strRequestUrl.Substring(0, strRequestUrl.LastIndexOf("/"));
                    string strPage = strRequestUrl.Substring(strRequestUrl.LastIndexOf("/") + 1, strRequestUrl.Length - strRequestUrl.LastIndexOf("/") - 1);

                    userSettingEntity.Url = strUrl;
                    userSettingEntity.Page = strPage;
                    userSettingEntity.CreateUser = strUserID;


                    GridEntity gridEntity = new GridEntity();

                    gridEntity.GID = userSettingEntity.GID;
                    gridEntity.UserID = strUserID;
                    gridEntity.GroupBy = "";
                    gridEntity.DefaultPrePageCount = 15;
                    gridEntity.PagePreCount = jsonColumnGroupEntity.ShowCount;

                    List<GridColumnEntity> gridColumnEntities = new List<GridColumnEntity>();

                    foreach (JsonColumnEntity column in jsonColumnGroupEntity.JsonColumnEntities)
                    {
                        GridColumnEntity gridColumnEntity = new GridColumnEntity();

                        if (column.col6 != -1)
                        {
                            gridColumnEntity.Name = column.col2;
                            gridColumnEntity.VisibleState = column.col6;
                        }
                        else
                        {
                            switch (column.col3.Trim())
                            {
                                case "品名编码":
                                    gridColumnEntity.Name = "GOODCODE";
                                    break;
                                case "品名名称":
                                    gridColumnEntity.Name = "GOODNAME";
                                    break;
                                case "品名描述":
                                    gridColumnEntity.Name = "DESCRIP";
                                    break;
                            }
                            gridColumnEntity.VisibleState = 0;
                        }

                        gridColumnEntity.Description = column.col3;
                        gridColumnEntity.Index = column.col4;
                        gridColumnEntity.Width = column.col5;

                        gridColumnEntities.Add(gridColumnEntity);
                    }
                    //Columns
                    gridEntity.Columns = gridColumnEntities;

                    userSettingEntity.Xml = SaveUserSetting(gridEntity).OuterXml;

                    int iResult = userSettingDA.InsertUserSetting(userSettingEntity);

                    dvSaveState.InnerHtml = iResult.ToString();
                }
            }

        }

        #region 获取列信息
        /// <summary>
        /// 获取列信息
        /// </summary>
        /// <param name="tempValue"></param>
        /// <returns></returns>
        private JsonColumnGroupEntity GetPostEntity(string tempValue)
        {
            JsonColumnGroupEntity tempColumnGroupEntity = new JsonColumnGroupEntity();
            try
            {
                tempColumnGroupEntity = (JsonColumnGroupEntity)JSON.Instance.ToObject(tempValue);
            }
            catch (Exception error)
            {
                throw error;
            }
            return tempColumnGroupEntity;
        }
        #endregion

        private XmlDocument SaveUserSetting(GridEntity gridEntity)
        {

            XmlDocument xmlDoc = new XmlDocument();
            XmlElement root = xmlDoc.CreateElement("user-settings");

            //xmlDoc.AppendChild(root);

            XmlElement xGid = xmlDoc.CreateElement("gid");
            xGid.InnerText = gridEntity.GID;
            root.AppendChild(xGid);

            XmlElement xUserID = xmlDoc.CreateElement("userid");
            xUserID.InnerText = gridEntity.UserID;
            root.AppendChild(xUserID);

            XmlElement xCreateTime = xmlDoc.CreateElement("create-time");
            xCreateTime.InnerText = gridEntity.CreateTime.ToString();
            root.AppendChild(xCreateTime);

            XmlElement xColumns = xmlDoc.CreateElement("columns");

            foreach (GridColumnEntity column in gridEntity.Columns)
            {
                XmlElement xColumn = xmlDoc.CreateElement("column");
                XmlElement nName = xmlDoc.CreateElement("name");
                nName.InnerText = column.Name;

                xColumn.AppendChild(nName);

                XmlElement nDescription = xmlDoc.CreateElement("description");
                nDescription.InnerText = column.Description;

                xColumn.AppendChild(nDescription);

                XmlElement nIndex = xmlDoc.CreateElement("index");
                nIndex.InnerText = column.Index.ToString();

                xColumn.AppendChild(nIndex);

                XmlElement nWidth = xmlDoc.CreateElement("width");
                nWidth.InnerText = column.Width.ToString();

                xColumn.AppendChild(nWidth);

                XmlElement nVisible = xmlDoc.CreateElement("visible");
                nVisible.InnerText = column.VisibleState.ToString();

                xColumn.AppendChild(nVisible);

                xColumns.AppendChild(xColumn);
            }

            root.AppendChild(xColumns);

            XmlElement xGroupBy = xmlDoc.CreateElement("group-by");
            xGroupBy.InnerText = gridEntity.GroupBy;

            root.AppendChild(xGroupBy);

            XmlElement xPage = xmlDoc.CreateElement("page");

            XmlElement nPageDefault = xmlDoc.CreateElement("page-default");
            nPageDefault.InnerText = gridEntity.DefaultPrePageCount.ToString();
            xPage.AppendChild(nPageDefault);

            XmlElement nPagePre = xmlDoc.CreateElement("page-pre");
            nPagePre.InnerText = gridEntity.PagePreCount.ToString();
            xPage.AppendChild(nPagePre);

            root.AppendChild(xPage);

            xmlDoc.AppendChild(root);
            return xmlDoc;
        }

        private GridEntity GetSettingXml(string strXml)
        {
            XmlDocument xmlSettingDoc = new XmlDocument();
            GridEntity gridEntity = new GridEntity();
            try
            {
                xmlSettingDoc.LoadXml(strXml);

                gridEntity.GID = xmlSettingDoc.ChildNodes[0].ChildNodes[0].InnerText.Trim();
                gridEntity.UserID = xmlSettingDoc.ChildNodes[0].ChildNodes[1].InnerText.Trim();
                gridEntity.CreateTime = DateTime.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[2].InnerText.Trim());

                IList<GridColumnEntity> columnsEntities = new List<GridColumnEntity>();

                int iColCount = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes.Count;

                for (int i = 0; i < iColCount; i++)
                {
                    GridColumnEntity columnEntity = new GridColumnEntity();
                    //columnEntity.GID = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[0].ToString();
                    columnEntity.Name = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[0].InnerText.Trim();
                    columnEntity.Description = xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[1].InnerText.Trim();
                    columnEntity.Index = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[2].InnerText.Trim());
                    columnEntity.Width = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[3].ChildNodes[i].ChildNodes[3].InnerText.Trim());

                    columnsEntities.Add(columnEntity);
                }

                gridEntity.Columns = columnsEntities;
                gridEntity.GroupBy = xmlSettingDoc.ChildNodes[0].ChildNodes[4].InnerText.Trim();
                gridEntity.DefaultPrePageCount = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[5].ChildNodes[0].InnerText.Trim());
                gridEntity.PagePreCount = int.Parse(xmlSettingDoc.ChildNodes[0].ChildNodes[5].ChildNodes[1].InnerText.Trim());
            }
            catch (Exception error)
            {
                throw (error);
            }

            return gridEntity;
        }

        public enum SqlName
        {
            NAME = 0,
            LOGTYPE = 1,
            LOGTIME = 2,
            LOGCONTENT = 3,
            USERNAME = 4
        }
        #endregion

    }
}