using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
   public static class FileCabinetAService
    {
        /// 
        /// 根据用户id获取文件柜主表列表
        /// 
        /// 
        /// 
        public static List GetFileCabinetAListByProjectId(string projectId)
        {
            var FileCabinetAList = from x in Funs.DB.InformationProject_FileCabinetA
                                   orderby x.Code
                                   where x.ProjectId == projectId
                                   select x;
            return FileCabinetAList.ToList();
        }
        /// 
        /// 根据主键id获取文件柜
        /// 
        /// 
        /// 
        public static Model.InformationProject_FileCabinetA GetFileCabinetAByID(string FileCabinetAId)
        {
            return Funs.DB.InformationProject_FileCabinetA.FirstOrDefault(x => x.FileCabinetAId == FileCabinetAId);
        }
        /// 
        /// 根据菜单id项目id获取文件柜
        /// 
        /// 
        /// 
        public static Model.InformationProject_FileCabinetA GetFileCabinetAByMenuIdProjectId(string MenuId, string ProjectId)
        {
            return Funs.DB.InformationProject_FileCabinetA.FirstOrDefault(x => x.MenuId == MenuId && x.ProjectId == ProjectId);
        }
        /// 
        /// 添加文件柜
        /// 
        /// 
        public static void AddFileCabinetA(Model.InformationProject_FileCabinetA FileCabinetA)
        {
            Model.InformationProject_FileCabinetA newFileCabinetA = new Model.InformationProject_FileCabinetA
            {
                FileCabinetAId = FileCabinetA.FileCabinetAId,
                ProjectId = FileCabinetA.ProjectId,
                MenuId = FileCabinetA.MenuId,
                Code = FileCabinetA.Code,
                Title = FileCabinetA.Title,
                SupFileCabinetAId = FileCabinetA.SupFileCabinetAId,
                IsEndLever = FileCabinetA.IsEndLever
            };
            Funs.DB.InformationProject_FileCabinetA.InsertOnSubmit(newFileCabinetA);
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 修改文件柜
        /// 
        /// 
        public static void UpdateFileCabinetA(Model.InformationProject_FileCabinetA FileCabinetA)
        {
            Model.InformationProject_FileCabinetA newFileCabinetA = Funs.DB.InformationProject_FileCabinetA.FirstOrDefault(e => e.FileCabinetAId == FileCabinetA.FileCabinetAId);
            if (newFileCabinetA != null)
            {
                newFileCabinetA.Code = FileCabinetA.Code;
                newFileCabinetA.Title = FileCabinetA.Title;
                newFileCabinetA.SupFileCabinetAId = FileCabinetA.SupFileCabinetAId;
                newFileCabinetA.IsEndLever = FileCabinetA.IsEndLever;
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 根据主键删除信息
        /// 
        /// 
        public static void DeleteFileCabinetAByID(string FileCabinetAId)
        {
            Model.InformationProject_FileCabinetA FileCabinetA = Funs.DB.InformationProject_FileCabinetA.FirstOrDefault(e => e.FileCabinetAId == FileCabinetAId);
            {
                Funs.DB.InformationProject_FileCabinetA.DeleteOnSubmit(FileCabinetA);
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 是否存在文件夹名称
        /// 
        /// 
        /// true-存在,false-不存在
        public static bool IsExistTitle(string FileCabinetAId, string supFileCabinetAId, string title)
        {
            var q = Funs.DB.InformationProject_FileCabinetA.FirstOrDefault(x => x.SupFileCabinetAId == supFileCabinetAId && x.Title == title
                    && x.FileCabinetAId != FileCabinetAId);
            if (q != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// 
        /// 是否可删除节点
        /// 
        /// 
        /// true-可以,false-不可以
        public static bool IsDeleteFileCabinetA(string FileCabinetAId)
        {
            bool isDelete = true;
            var FileCabinetA = GetFileCabinetAByID(FileCabinetAId);
            if (FileCabinetA != null)
            {
                if (FileCabinetA.IsEndLever == true)
                {
                    var detailCout = Funs.DB.InformationProject_FileCabinetAItem.FirstOrDefault(x => x.FileCabinetAId == FileCabinetAId);
                    if (detailCout != null)
                    {
                        isDelete = false;
                    }
                }
                else
                {
                    var supItemSetCount = Funs.DB.InformationProject_FileCabinetA.FirstOrDefault(x => x.SupFileCabinetAId == FileCabinetAId);
                    if (supItemSetCount != null)
                    {
                        isDelete = false;
                    }
                }
            }
            return isDelete;
        }
        #region 页面信息添加到文件柜A
        #region 添加到文件柜A中方法
        /// 
        /// 添加到文件柜A中方法
        /// 
        /// 
        /// 
        /// 
        public static void AddFileCabinetA(string menuId, string dataId, string content, string url, string projectId)
        {
            var fileCabinetA = BLL.FileCabinetAService.GetFileCabinetAByMenuIdProjectId(menuId, projectId);
            if (fileCabinetA != null)   ////判断这个菜单id 是否在文件柜A中 在则插入明细 不在则查找上一级菜单id
            {
                AddDataToFileCabinetAItem(dataId, content, fileCabinetA.FileCabinetAId, url);
            }
            else   ///增加改菜单到文件柜A主表 然后增加明细
            {
                AddDataToFileCabinetA(menuId, dataId, content, url, projectId);
            }
        }
        #endregion
        #region 添加到文件柜A中方法
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static void AddDataToFileCabinetA(string menuId, string dataId, string content, string url, string projectId)
        {
            var sysMenu = BLL.SysMenuService.GetSysMenuByMenuId(menuId);
            if (sysMenu != null)
            {
                Model.InformationProject_FileCabinetA newFileCabinetA = new Model.InformationProject_FileCabinetA
                {
                    FileCabinetAId = SQLHelper.GetNewID(typeof(Model.InformationProject_FileCabinetA)),
                    ProjectId = projectId,
                    Code = sysMenu.SortIndex.ToString(),
                    Title = sysMenu.MenuName,
                    MenuId = menuId
                };
                if (menuId == "0")
                {
                    newFileCabinetA.SupFileCabinetAId = "0";
                }
                else
                {
                    newFileCabinetA.SupFileCabinetAId = null;
                }
                newFileCabinetA.IsEndLever = sysMenu.IsEnd;
                BLL.FileCabinetAService.AddFileCabinetA(newFileCabinetA);
                ///查询是否存在下级菜单
                var fileCabinetAList = from x in Funs.DB.InformationProject_FileCabinetA
                                       join y in Funs.DB.Sys_Menu on x.MenuId equals y.MenuId
                                       where x.SupFileCabinetAId == null && x.ProjectId == projectId && y.SuperMenu == menuId
                                       select x;
                if (fileCabinetAList.Count() > 0)
                {
                    foreach (var item in fileCabinetAList)
                    {
                        item.SupFileCabinetAId = newFileCabinetA.FileCabinetAId;
                        BLL.FileCabinetAService.UpdateFileCabinetA(item);
                    }
                }
                if (sysMenu.IsEnd == true)  ///增加明细
                {
                    AddDataToFileCabinetAItem(dataId, content, newFileCabinetA.FileCabinetAId, url);
                }
                var fileCabinetASuper = BLL.FileCabinetAService.GetFileCabinetAByMenuIdProjectId(sysMenu.SuperMenu, projectId);
                if (fileCabinetASuper == null)  ///继续增加上级菜单
                {
                    AddDataToFileCabinetA(sysMenu.SuperMenu, dataId, content, url, projectId);
                }
                else
                {
                    var fileCabinetASuperList = from x in Funs.DB.InformationProject_FileCabinetA
                                                join y in Funs.DB.Sys_Menu on x.MenuId equals y.MenuId
                                                where x.ProjectId == projectId && y.SuperMenu == fileCabinetASuper.MenuId && x.SupFileCabinetAId == null
                                                select x;
                    if (fileCabinetASuperList.Count() > 0)
                    {
                        foreach (var item in fileCabinetASuperList)
                        {
                            item.SupFileCabinetAId = fileCabinetASuper.FileCabinetAId;
                            BLL.FileCabinetAService.UpdateFileCabinetA(item);
                        }
                    }
                }
            }
            else
            {
                ///查询是否存在下级菜单
                var fileCabinetAList = from x in Funs.DB.InformationProject_FileCabinetA
                                       where x.SupFileCabinetAId == null && x.ProjectId == projectId
                                       select x;
                if (fileCabinetAList.Count() > 0)
                {
                    foreach (var item in fileCabinetAList)
                    {
                        item.SupFileCabinetAId = "0";
                        BLL.FileCabinetAService.UpdateFileCabinetA(item);
                    }
                }
            }
        }
        #endregion
        #region 增加文件柜明细
        /// 
        ///  增加文件柜明细
        /// 
        public static void AddDataToFileCabinetAItem(string dataId, string content, string fileCabinetAId, string url)
        {
            var fileCabinetAItem = BLL.FileCabinetAItemService.GetFileCabinetAItemByID(dataId); ///明细是否存在
            if (fileCabinetAItem != null)
            {
                fileCabinetAItem.Title = content;
                BLL.FileCabinetAItemService.UpdateFileCabinetAItem(fileCabinetAItem);
            }
            else
            {
                Model.InformationProject_FileCabinetAItem newFileCabinetAItem = new Model.InformationProject_FileCabinetAItem
                {
                    FileCabinetAItemId = dataId,
                    FileCabinetAId = fileCabinetAId,
                    Code = BLL.CodeRecordsService.ReturnCodeByDataId(dataId),
                    Title = content,
                    CompileDate = System.DateTime.Now,
                    IsMenu = true,
                    Url = url
                };
                BLL.FileCabinetAItemService.AddFileCabinetAItem(newFileCabinetAItem);
            }
        }
        #endregion
        #endregion
    }
}