using BLL;
using Model;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.TestRun.Feeding
{
    public partial class SubInspectTerm : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.InitTreeMenu();//加载树
                PageInit();
            }
        }
        #region 树绑定
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.tvControlItem.Nodes.Clear();
            TreeNode rootNode = new TreeNode();
            rootNode.Text = "检查表";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.ToolTip = "";
            rootNode.EnableClickEvent = true;
            this.tvControlItem.Nodes.Add(rootNode);
            var list = Funs.DB.PreRun_SysDevice.Where(a => a.ProjectId == this.CurrUser.LoginProjectId && a.PreRunLevel == 1).OrderBy(a => a.Sort);
            if (list.Count() > 0)
            {
                foreach (var item in list)
                {
                    TreeNode rootOneNode = new TreeNode();
                    rootOneNode.NodeID = item.PreRunId;
                    rootOneNode.Text = item.PreRunName;
                    rootOneNode.ToolTip = item.PreRunName;
                    rootOneNode.CommandName = "";
                    rootOneNode.EnableClickEvent = true;
                    rootOneNode.EnableExpandEvent = false;
                    rootNode.Nodes.Add(rootOneNode);
                    rootOneNode.Expanded = true;
                }
            }
        }
        /// 
        /// 点击TreeView
        /// 
        protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            this.BindGrid();
        }
        #endregion
        #region 数据绑定
        /// 
        /// 绑定下拉框
        /// 
        public void PageInit()
        {
            //检查人绑定
            var userList = from user in Funs.DB.Sys_User
                           join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId
                           where projectrole.ProjectId == this.CurrUser.LoginProjectId
                           select user;
            var userids = new List() { Const.sysglyId, Const.hfnbdId, Const.sedinId };
            var addUserList = Funs.DB.Sys_User.Where(x => userids.Contains(x.UserId));
            var users = userList.ToList();
            if (addUserList.Count() > 0)
            {
                users.AddRange(addUserList);
            }
            if (users.Count() > 0)
            {
                ddlDriverCharge.DataTextField = "UserName";
                ddlDriverCharge.DataValueField = "UserId";
                ddlDriverCharge.DataSource = users;
                ddlDriverCharge.DataBind();
                ddlDrivingManager.DataTextField = "UserName";
                ddlDrivingManager.DataValueField = "UserId";
                ddlDrivingManager.DataSource = users;
                ddlDrivingManager.DataBind();
                ddlProjectManager.DataTextField = "UserName";
                ddlProjectManager.DataValueField = "UserId";
                ddlProjectManager.DataSource = users;
                ddlProjectManager.DataBind();
            }
        }
        /// 
        /// 绑定数据
        /// 
        public void BindGrid(List ulist = null)
        {
            var result = new List();
            if (ulist != null)
            {
                #region 新增修改检查项
                var groups = ulist.GroupBy(x => x.GroupName);
                int gnum = 1;
                foreach (var itemGroup in groups)
                {
                    //添加一级节点
                    var firstModel = new FeedingRun_SubInspectTermItemData();
                    firstModel.TermItemId = itemGroup.Key;
                    firstModel.GroupName = itemGroup.Key;
                    firstModel.Sort = gnum;
                    firstModel.GroupSort = gnum;
                    firstModel.Level = 1;
                    result.Add(firstModel);
                    gnum++;
                    //获取此分组的检查项
                    var groupTermItems = ulist.Where(x => x.GroupName == itemGroup.Key);
                    foreach (var itemTerm in groupTermItems)
                    {
                        var model = new FeedingRun_SubInspectTermItemData();
                        model.TermItemId = itemTerm.TermItemId;
                        model.ParentId = itemGroup.Key;
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.WorkInspectId = itemTerm.WorkInspectId;
                        model.WorkInspectName = itemTerm.WorkInspectName;
                        model.InspectedUser = itemTerm.InspectedUser;
                        model.InspectedUser = itemTerm.InspectedUser;
                        model.InspectionIllustrate = itemTerm.InspectionIllustrate;
                        model.GroupName = itemTerm.GroupName;
                        model.Sort = itemTerm.Sort;
                        model.GroupSort = itemTerm.GroupSort;
                        model.Level = 2;
                        result.Add(model);
                    }
                }
                #endregion
            }
            else
            {
                var list = Funs.DB.FeedingRun_SubInspectTermItem.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.InstallationId == this.tvControlItem.SelectedNodeID).OrderBy(x => x.Sort);
                if (list.Count() > 0)
                {
                    var groups = list.GroupBy(x => new { x.GroupName });
                    int firstnum = 1;
                    foreach (var itemGroup in groups)
                    {
                        //添加一级节点
                        var firstModel = new FeedingRun_SubInspectTermItemData();
                        firstModel.TermItemId = itemGroup.Key.GroupName;
                        firstModel.GroupName = itemGroup.Key.GroupName;
                        firstModel.Sort = firstnum;
                        firstModel.GroupSort = firstnum;
                        firstModel.Level = 1;
                        result.Add(firstModel);
                        firstnum++;
                        //获取此分组的检查项
                        var groupTermItems = list.Where(x => x.GroupName == itemGroup.Key.GroupName);
                        foreach (var itemTerm in groupTermItems)
                        {
                            var model = new FeedingRun_SubInspectTermItemData();
                            model.TermItemId = itemTerm.TermItemId;
                            model.ParentId = itemGroup.Key.GroupName;
                            model.ProjectId = itemTerm.ProjectId;
                            model.WorkInspectId = itemTerm.WorkInspectId;
                            model.WorkInspectName = itemTerm.WorkInspectName;
                            model.InspectedUser = itemTerm.InspectedUser;
                            model.InspectedUser = itemTerm.InspectedUser;
                            model.GroupName = itemTerm.GroupName;
                            model.Sort = itemTerm.Sort.Value;
                            model.GroupSort = itemTerm.Sort.Value;
                            model.InspectionIllustrate = itemTerm.InspectionIllustrate;
                            model.Level = 2;
                            result.Add(model);
                        }
                    }
                    var itemModel = list.FirstOrDefault();
                    ddlDriverCharge.SelectedValue = itemModel.DriverCharge;
                    ddlDrivingManager.SelectedValue = itemModel.DrivingManager;
                    ddlProjectManager.SelectedValue = itemModel.ProjectManager;
                }
                else
                {
                    ddlDriverCharge.SelectedValue = "";
                    ddlDrivingManager.SelectedValue = "";
                    ddlProjectManager.SelectedValue = "";
                    var defaultDatas = Funs.DB.FeedingRun_WorkInspectTemplate.OrderBy(x => x.Sort);
                    if (defaultDatas.Count() > 0)
                    {
                        var groups = defaultDatas.GroupBy(x => x.GroupName);
                        int firstnum = 1;
                        foreach (var itemGroup in groups)
                        {
                            //添加一级节点
                            var firstModel = new FeedingRun_SubInspectTermItemData();
                            firstModel.TermItemId = itemGroup.Key;
                            firstModel.GroupName = itemGroup.Key;
                            firstModel.Sort = firstnum;
                            firstModel.GroupSort = firstnum;
                            firstModel.Level = 1;
                            result.Add(firstModel);
                            firstnum++;
                            //获取此分组的检查项
                            var groupTermItems = defaultDatas.Where(x => x.GroupName == itemGroup.Key);
                            foreach (var itemTerm in groupTermItems)
                            {
                                var model = new FeedingRun_SubInspectTermItemData();
                                model.TermItemId = Guid.NewGuid().ToString();
                                model.ParentId = itemGroup.Key;
                                model.ProjectId = this.CurrUser.LoginProjectId;
                                model.WorkInspectId = itemTerm.WorkInspectId;
                                model.WorkInspectName = itemTerm.WorkInspectName;
                                model.GroupName = itemTerm.GroupName;
                                model.Sort = itemTerm.Sort.Value;
                                model.GroupSort = itemTerm.Sort.Value;
                                model.Level = 2;
                                result.Add(model);
                            }
                        }
                    }
                }
            }
            Grid1.DataSource = result;
            Grid1.DataBind();
            //检查人绑定
            var userList = from user in Funs.DB.Sys_User join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId where projectrole.ProjectId == this.CurrUser.LoginProjectId select user;
            var userids = new List() { Const.sysglyId, Const.hfnbdId, Const.sedinId };
            var addUserList = Funs.DB.Sys_User.Where(x => userids.Contains(x.UserId));
            var data = userList.ToList();
            if (addUserList.Count() > 0)
            {
                data.AddRange(addUserList);
            }
            DropDownList ddlInspectedUser = Grid1.FindColumn("InspectedUser").FindControl("ddlInspectedUser") as DropDownList;
            ddlInspectedUser.DataTextField = "UserName";
            ddlInspectedUser.DataValueField = "UserId";
            ddlInspectedUser.DataSource = data;
            ddlInspectedUser.DataBind();
        }
        /// 
        /// 行按钮事件
        /// 
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                string rowID = e.RowID;
                var level = int.Parse(this.Grid1.Rows[e.RowIndex].DataKeys[4].ToString());
                if (level == 1)
                {
                    var groupName = this.Grid1.Rows[e.RowIndex].DataKeys[3].ToString();
                    var deletelist = Funs.DB.FeedingRun_SubInspectTermItem.Where(p => p.GroupName == groupName && p.InstallationId == this.tvControlItem.SelectedNodeID);
                    if (deletelist.Count() > 0)
                    {
                        Funs.DB.FeedingRun_SubInspectTermItem.DeleteAllOnSubmit(deletelist);
                        Funs.DB.SubmitChanges();
                        BindGrid();
                        ShowNotify("删除成功!");
                    }
                    else
                    {
                        var list = gvList();
                        list.RemoveAll(x => x.GroupName == groupName);
                        Grid1.DataSource = list;
                        Grid1.DataBind();
                        ShowNotify("删除成功!");
                    }
                }
                else
                {
                    var model = Funs.DB.FeedingRun_SubInspectTermItem.FirstOrDefault(p => p.TermItemId == rowID);
                    if (model != null)
                    {
                        if (model.InspectionResults != null)
                        {
                            ShowNotify("已存在检查结果,无法删除!", MessageBoxIcon.Warning);
                            return;
                        }
                        Funs.DB.FeedingRun_SubInspectTermItem.DeleteOnSubmit(model);
                        Funs.DB.SubmitChanges();
                        BindGrid();
                        ShowNotify("删除成功!");
                    }
                    else
                    {
                        var list = gvList();
                        list.RemoveAll(x => x.TermItemId == rowID);
                        Grid1.DataSource = list;
                        Grid1.DataBind();
                        ShowNotify("删除成功!");
                    }
                }
            }
        }
        #endregion
        /// 
        /// 保存
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(ddlDriverCharge.SelectedValue))
                {
                    ShowNotify("请选择装置开车负责人!", MessageBoxIcon.Warning);
                    return;
                }
                if (string.IsNullOrWhiteSpace(ddlDrivingManager.SelectedValue))
                {
                    ShowNotify("请选择开车经理!", MessageBoxIcon.Warning);
                    return;
                }
                if (string.IsNullOrWhiteSpace(ddlProjectManager.SelectedValue))
                {
                    ShowNotify("请选择项目经理!", MessageBoxIcon.Warning);
                    return;
                }
                List subTrems = new List();
                List subTremItems = new List();
                var subTrem = Funs.DB.FeedingRun_SubInspectTerm.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId && x.InstallationId == this.tvControlItem.SelectedNodeID);
                var termItems = Funs.DB.FeedingRun_SubInspectTermItem.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.InstallationId == this.tvControlItem.SelectedNodeID).ToList();
                if (termItems.Count > 0 && termItems.Count(x => x.InspectionResults == null) == 0)
                {
                    ShowNotify("所有检查项已存在检查结果,无法保存!", MessageBoxIcon.Warning);
                    return;
                }
                int itemnum = 1;
                JArray mergedData = Grid1.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString();
                    var workInspectId = IsNullStr(this.Grid1.Rows[i].DataKeys[1]);
                    var groupName = IsNullStr(this.Grid1.Rows[i].DataKeys[3]);
                    var level = IsNullStr(this.Grid1.Rows[i].DataKeys[4]);
                    if (level == "1") continue;
                    //获取系统信息
                    var list = new List();
                    //检查表
                    if (subTrem == null)
                    {
                        subTrem = new FeedingRun_SubInspectTerm();
                        subTrem.SubInspectId = Guid.NewGuid().ToString();
                        subTrem.ProjectId = this.CurrUser.LoginProjectId;
                        subTrem.DriverCharge = ddlDriverCharge.SelectedValue;
                        subTrem.DrivingManager = ddlDrivingManager.SelectedValue;
                        subTrem.ProjectManager = ddlProjectManager.SelectedValue;
                        subTrem.InstallationId = this.tvControlItem.SelectedNodeID;
                        subTrem.AddUser = this.CurrUser.UserId;
                        subTrem.AddTime = DateTime.Now;
                        subTrems.Add(subTrem);
                    }
                    else
                    {
                        subTrem.DriverCharge = ddlDriverCharge.SelectedValue;
                        subTrem.DrivingManager = ddlDrivingManager.SelectedValue;
                        subTrem.ProjectManager = ddlProjectManager.SelectedValue;
                        Funs.DB.SubmitChanges();
                    }
                    //检查项表
                    var model = Funs.DB.FeedingRun_SubInspectTermItem.FirstOrDefault(x => x.TermItemId == termItemId);
                    if (model == null)
                    {
                        model = new FeedingRun_SubInspectTermItem();
                        model.TermItemId = termItemId;
                        model.SubInspectId = subTrem.SubInspectId;
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.WorkInspectId = workInspectId;
                        model.WorkInspectName = values.Value("WorkInspectName");
                        model.InspectedUser = values.Value("InspectedUser");
                        model.GroupName = groupName;
                        model.DriverCharge = ddlDriverCharge.SelectedValue;
                        model.DrivingManager = ddlDrivingManager.SelectedValue;
                        model.ProjectManager = ddlProjectManager.SelectedValue;
                        model.InstallationId = this.tvControlItem.SelectedNodeID;
                        model.AddUser = this.CurrUser.UserId;
                        model.AddTime = DateTime.Now;
                        model.Sort = itemnum;
                        subTremItems.Add(model);
                        itemnum++;
                    }
                    else
                    {
                        model.GroupName = groupName;
                        model.InspectedUser = IsNullStr(values.Value("InspectedUser"));
                        model.WorkInspectName = values.Value("WorkInspectName");
                        Funs.DB.SubmitChanges();
                    }
                }
                if (subTrems != null) Funs.DB.FeedingRun_SubInspectTerm.InsertAllOnSubmit(subTrems);
                if (subTremItems.Count > 0) Funs.DB.FeedingRun_SubInspectTermItem.InsertAllOnSubmit(subTremItems);
                Funs.DB.SubmitChanges();
                if (Funs.DB.FeedingRun_SubInspectTermItem.Count(x => x.SubInspectId == subTrem.SubInspectId && x.InspectionResults.GetValueOrDefault() != 1) == 0)
                {
                    subTrem.InspectionIsAllPass = 1;
                }
                else
                {
                    subTrem.InspectionIsAllPass = 0;
                }
                Funs.DB.SubmitChanges();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        /// 
        /// 新增
        /// 
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            this.hidRequestNodeID.Text = string.Empty;
            PageContext.RegisterStartupScript(Window1.GetSaveStateReference(hidRequestNodeID.ClientID) + Window1.GetShowReference($"SubInspectTermEdit.aspx?TermItemId=&WorkInspectId=&InstallationId=" + this.tvControlItem.SelectedNodeID + "", "新增"));
        }
        /// 
        /// 修改
        /// 
        protected void btnModify_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请选择记录!", MessageBoxIcon.Warning);
                return;
            }
            if (Grid1.SelectedRowIndexArray.Length > 1)
            {
                Alert.ShowInTop("只可选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            var level = int.Parse(this.Grid1.Rows[Grid1.SelectedRowIndex].DataKeys[4].ToString());
            if (level == 1)
            {
                Alert.ShowInTop("一级节点无法修改!", MessageBoxIcon.Warning);
                return;
            }
            var workInspectId = IsNullStr(this.Grid1.Rows[Grid1.SelectedRowIndex].DataKeys[1]);
            var groupName = IsNullStr(this.Grid1.Rows[Grid1.SelectedRowIndex].DataKeys[3]);
            var workInspectName = IsNullStr(this.Grid1.Rows[Grid1.SelectedRowIndex].DataKeys[6]);
            this.hidRequestNodeID.Text = string.Empty;
            PageContext.RegisterStartupScript(Window1.GetSaveStateReference(hidRequestNodeID.ClientID) + Window1.GetShowReference($"SubInspectTermEdit.aspx?TermItemId={Grid1.SelectedRowID}&WorkInspectId={workInspectId}&GroupName={groupName}&WorkInspectName={workInspectName}&InstallationId={this.tvControlItem.SelectedNodeID}", "编辑"));
        }
        /// 
        /// 右击新增
        /// 
        protected void btnMenuParentAdd_Click(object sender, EventArgs e)
        {
            btnAdd_Click(sender, e);
        }
        /// 
        /// 右击修改
        /// 
        protected void btnMenuModify_Click(object sender, EventArgs e)
        {
            btnModify_Click(sender, e);
        }
        /// 
        /// 获取集合
        /// 
        private List gvList()
        {
            List list = new List();
            JArray mergedData = Grid1.GetMergedData();
            foreach (JObject mergedRow in mergedData)
            {
                string status = mergedRow.Value("status");
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
                var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString();
                var workInspectId = IsNullStr(this.Grid1.Rows[i].DataKeys[1]);
                var subInspectId = IsNullStr(this.Grid1.Rows[i].DataKeys[2]);
                var groupName = IsNullStr(this.Grid1.Rows[i].DataKeys[3]);
                var level = IsNullStr(this.Grid1.Rows[i].DataKeys[4]);
                var parentId = IsNullStr(this.Grid1.Rows[i].DataKeys[5]);
                var groupSort = IsNullStr(this.Grid1.Rows[i].DataKeys[7]);
                var inspectionResults = IsNullStr(this.Grid1.Rows[i].DataKeys[8]);
                var inspectionIllustrate = IsNullStr(this.Grid1.Rows[i].DataKeys[9]);
                var model = new FeedingRun_SubInspectTermItemData();
                model.TermItemId = termItemId;
                model.SubInspectId = subInspectId;
                model.ProjectId = this.CurrUser.LoginProjectId;
                model.WorkInspectId = workInspectId;
                model.WorkInspectName = values.Value("WorkInspectName");
                model.InstallationId = this.tvControlItem.SelectedNodeID;
                model.GroupName = groupName;
                model.GroupSort = !string.IsNullOrWhiteSpace(groupSort) ? int.Parse(groupSort) : 0;
                model.Level = !string.IsNullOrWhiteSpace(level) ? int.Parse(level) : 0;
                model.ParentId = parentId;
                model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                if (!string.IsNullOrWhiteSpace(inspectionResults))
                {
                    model.InspectionResults = int.Parse(inspectionResults);
                }
                model.InspectionIllustrate = inspectionIllustrate;
                model.AddUser = this.CurrUser.UserId;
                model.AddTime = DateTime.Now;
                model.Sort = i + 1;
                list.Add(model);
            }
            return list;
        }
        /// 
        /// 检测结果
        /// 
        /// 
        public string Results(object value)
        {
            var result = string.Empty;
            if (value != null)
            {
                var intVal = int.Parse(value.ToString());
                if (intVal == 1)
                {
                    result = "通过";
                }
                else if (intVal == 0)
                {
                    result = "未通过";
                }
            }
            return result;
        }
        /// 
        /// 数据绑定实体
        /// 
        public class FeedingRun_SubInspectTermItemData : FeedingRun_SubInspectTermItem
        {
            /// 
            /// 上级主键
            /// 
            public string ParentId { get; set; }
            /// 
            /// 分组排序
            /// 
            public int GroupSort { get; set; }
            /// 
            /// 级别
            /// 
            public int Level { get; set; }
        }
        /// 
        /// 关闭
        /// 
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(hidRequestNodeID.Text))
            {
                var list = gvList();
                string termItemId = hidRequestNodeID.Text.Split('|')[0];
                string workInspectName = hidRequestNodeID.Text.Split('|')[1];
                string groupName = hidRequestNodeID.Text.Split('|')[2];
                string installationId = hidRequestNodeID.Text.Split('|')[3];
                var model = new FeedingRun_SubInspectTermItemData();
                model.TermItemId = Guid.NewGuid().ToString();
                model.ParentId = groupName;
                model.ProjectId = this.CurrUser.LoginProjectId;
                model.WorkInspectId = string.Empty;
                model.WorkInspectName = workInspectName;
                model.GroupName = groupName;
                model.InstallationId = installationId;
                model.Sort = list.Count + 1;
                model.Level = 2;
                list.Add(model);
                list.RemoveAll(x => x.Level == 1);
                list = list.OrderBy(x => x.Sort).ToList();
                BindGrid(list);
            }
        }
        /// 
        /// 行加载事件
        /// 
        protected void Grid1_RowDataBound(object sender, GridRowEventArgs e)
        {
            var level = int.Parse(this.Grid1.Rows[e.RowIndex].DataKeys[4].ToString());
            RenderField InspectedUser = Grid1.FindColumn("InspectedUser") as RenderField;
            if (level == 1)
            {
                e.CellAttributes[InspectedUser.ColumnIndex]["data-color"] = "color";
            }
        }
        /// 
        /// 字符串处理
        /// 
        /// 
        private string IsNullStr(object value)
        {
            var result = string.Empty;
            if (value == null) return result;
            return value.ToString();
        }
    }
}