using Model;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
namespace BLL.Email_Send
{
  public static  class Email_SendTemplateService
    {
        #region 邮件模板添加
        /// 
        /// 邮件模板添加
        /// 
        /// 
        public static void AddSendEmail(Model.Email_SendTemplate Email_SendTemplate)
        {
            Model.Email_SendTemplate newsendTemplate = new Model.Email_SendTemplate();
            newsendTemplate.EmailId = Guid.NewGuid().ToString();           
            newsendTemplate.EmailParamsID = Email_SendTemplate.EmailParamsID;
            newsendTemplate.EailTiaoJian = Email_SendTemplate.EailTiaoJian;
            newsendTemplate.EmailUserYN = Email_SendTemplate.EmailUserYN;
            newsendTemplate.EmailTitle = Email_SendTemplate.EmailTitle;
            newsendTemplate.EmailContext = Email_SendTemplate.EmailContext;
            newsendTemplate.CreateName = Email_SendTemplate.CreateName;
            newsendTemplate.CreateTime = Email_SendTemplate.CreateTime;
            newsendTemplate.UpdateName = Email_SendTemplate.UpdateName;
            newsendTemplate.UpdateTime = Email_SendTemplate.UpdateTime;
            newsendTemplate.EmailDesc = Email_SendTemplate.EmailDesc;
            Funs.DB.Email_SendTemplate.InsertOnSubmit(newsendTemplate);
            Funs.DB.SubmitChanges();
        }
        #endregion
        #region 邮件模板修改
        /// 
        /// 邮件模板修改
        /// 
        /// 
        public static void UpdateEmail_SendTemplate(Model.Email_SendTemplate Email_SendTemplate)
        {
            Model.Email_SendTemplate newsendTemplate = Funs.DB.Email_SendTemplate.FirstOrDefault(x => x.EmailId == Email_SendTemplate.EmailId);
            newsendTemplate.EmailParamsID = Email_SendTemplate.EmailParamsID;
            newsendTemplate.EailTiaoJian = Email_SendTemplate.EailTiaoJian;
            newsendTemplate.EmailUserYN = Email_SendTemplate.EmailUserYN;
            newsendTemplate.EmailTitle = Email_SendTemplate.EmailTitle;
            newsendTemplate.EmailContext = Email_SendTemplate.EmailContext;
            newsendTemplate.UpdateName = Email_SendTemplate.UpdateName;
            newsendTemplate.UpdateTime = Email_SendTemplate.UpdateTime;
            newsendTemplate.EmailDesc = Email_SendTemplate.EmailDesc;
            Funs.DB.SubmitChanges();
        }
        #endregion
        #region 根据主键获取邮件设置
        /// 
        /// 根据主键获取邮件设置
        /// 
        /// 邮件设置Id
        /// 
        public static Model.Email_SendTemplate GetEmail_SendTemplate(string EmailID)
        {
            return Funs.DB.Email_SendTemplate.FirstOrDefault(x => x.EmailId == EmailID);
        }
        #endregion
        #region 获取邮件模板列表
        /// 
        /// 获取邮件模板列表
        /// 
        /// 
        public static List GetEmail_SendTemplateList()
        {
            return (from x in Funs.DB.Email_SendTemplate orderby x.CreateTime descending select x).ToList();
        }
        #endregion
        #region 根据主键删除
        /// 
        /// 根据主键删除EProject
        /// 
        /// 
        public static void DeleteEproejctById(string EmailId)
        {
            Model.Email_SendTemplate Email_SendTemplate = Funs.DB.Email_SendTemplate.FirstOrDefault(e => e.EmailId == EmailId);
            if (Email_SendTemplate != null)
            {
                Funs.DB.Email_SendTemplate.DeleteOnSubmit(Email_SendTemplate);
                Funs.DB.SubmitChanges();
            }
        }
        #endregion
        #region 根据EmailNotifier查询
        /// 
        /// 根据EmailNotifier查询EProject
        /// 
        /// 
        public static List GetEmailNotifierList(string EmailNotifier)
        {
            return (from x in Funs.DB.Email_SendTemplate orderby x.CreateTime descending select x).Where(o => o.EmailParamsID == EmailNotifier).ToList();
        }
        #endregion
        #region 根据EmailNotifier查询
        /// 
        /// 根据EmailNotifier查询EProject
        /// 
        /// 
        public static Email_SendTemplate GetEmailNotifier(string EmailNotifier)
        {
            return Funs.DB.Email_SendTemplate.FirstOrDefault(x => x.EmailParamsID == EmailNotifier);
        }
        #endregion
        #region 根据模版ID获取发送人列表
        public static List GetEmailByTemplateId(string templateId,string isCc)
        {
            var result = (from a in Funs.DB.Email_ToPeople
                          join b in Funs.DB.Sys_User on a.EmuserID equals b.UserId
                          where b.IsPost.Value && b.Email!=""
                          && a.EMPeopleType==isCc && a.EmtempID==templateId
                          select b.Email
                         ).ToList();
            return result;
        }
        #endregion 
        #region 事务提交 新增
        /// 
        /// 事物提交
        /// 
        /// 
        /// 
        /// 
        /// 
        public static bool Add(Model.Email_SendTemplate Email_SendTemplate, List peopleList)
        {
            bool result = true;
            if (Email_SendTemplate == null)
                return false;
            Funs.DB.Connection.Close();
            Funs.DB.Connection.Open();
            Funs.DB.CommandTimeout = 30000;
            using (DbTransaction tran = Funs.DB.Connection.BeginTransaction())
            {
                Funs.DB.Transaction = tran;
                try
                {
                    Model.Email_SendTemplate newsendTemplate = new Email_SendTemplate();
                    newsendTemplate.EmailId = Email_SendTemplate.EmailId;
                    newsendTemplate.EmailParamsID = Email_SendTemplate.EmailParamsID;
                    newsendTemplate.EailTiaoJian = Email_SendTemplate.EailTiaoJian;
                    newsendTemplate.EmailUserYN = Email_SendTemplate.EmailUserYN;
                    newsendTemplate.EmailTitle = Email_SendTemplate.EmailTitle;
                    newsendTemplate.EmailContext = Email_SendTemplate.EmailContext;
                    newsendTemplate.CreateName = Email_SendTemplate.CreateName;
                    newsendTemplate.CreateTime = Email_SendTemplate.CreateTime;
                    newsendTemplate.UpdateName = Email_SendTemplate.UpdateName;
                    newsendTemplate.UpdateTime = Email_SendTemplate.UpdateTime;
                    newsendTemplate.EmailDesc = Email_SendTemplate.EmailDesc;
                    
                    Funs.DB.Email_SendTemplate.InsertOnSubmit(newsendTemplate);
                    if (newsendTemplate != null)
                    {
                        var list = (from x in Funs.DB.Email_ToPeople where x.EmtempID == newsendTemplate.EmailId select x).ToList();
                        if (list != null || list.Count > 0)
                        {
                            Funs.DB.Email_ToPeople.DeleteAllOnSubmit(list);
                        }
                    }
                    if (peopleList != null)
                    {
                        Funs.DB.Email_ToPeople.InsertAllOnSubmit(peopleList);
                    }
                    Funs.DB.SubmitChanges();
                    tran.Commit();
                    result = true;
                }
                catch
                {
                    tran.Rollback();//回滚事务
                                    // db.Connection.Close();
                    result = false;
                }
            }
            Funs.DB.Connection.Close();
            return result;
        }
        #endregion
        #region 事务提交 修改
        /// 
        /// 事物提交
        /// 
        /// 
        /// 
        /// 
        /// 
        public static bool Update(Model.Email_SendTemplate Email_SendTemplate, List peopleList)
        {
            bool result = true;
            if (Email_SendTemplate == null)
                return false;
            Funs.DB.Connection.Close();
            Funs.DB.Connection.Open();
            Funs.DB.CommandTimeout = 30000;
            using (DbTransaction tran = Funs.DB.Connection.BeginTransaction())
            {
                Funs.DB.Transaction = tran;
                try
                {
                    Model.Email_SendTemplate newsendTemplate = Funs.DB.Email_SendTemplate.FirstOrDefault(x => x.EmailId == Email_SendTemplate.EmailId);
                    newsendTemplate.EmailParamsID = Email_SendTemplate.EmailParamsID;
                    newsendTemplate.EailTiaoJian = Email_SendTemplate.EailTiaoJian;
                    newsendTemplate.EmailUserYN = Email_SendTemplate.EmailUserYN;
                    newsendTemplate.EmailTitle = Email_SendTemplate.EmailTitle;
                    newsendTemplate.EmailContext = Email_SendTemplate.EmailContext;
                    newsendTemplate.CreateName = Email_SendTemplate.CreateName;
                    newsendTemplate.CreateTime = Email_SendTemplate.CreateTime;
                    newsendTemplate.UpdateName = Email_SendTemplate.UpdateName;
                    newsendTemplate.UpdateTime = Email_SendTemplate.UpdateTime;
                    newsendTemplate.EmailDesc = Email_SendTemplate.EmailDesc;
                    if (newsendTemplate != null)
                    {
                        // var list = (from x in Funs.DB.Em_toPeople where x.EmuserID == newsendTemplate.EmailId select x).ToList();
                        var list = (from x in Funs.DB.Email_ToPeople where x.EmtempID == newsendTemplate.EmailId select x).ToList();
                        if (list == null || list.Count == 0)
                        { }
                        else
                        {
                            Funs.DB.Email_ToPeople.DeleteAllOnSubmit(list);
                            Funs.DB.SubmitChanges();
                        }
                        
                    }
                    if (peopleList != null)
                    {
                        Funs.DB.Email_ToPeople.InsertAllOnSubmit(peopleList);
                        Funs.DB.SubmitChanges();
                    }
                    Funs.DB.SubmitChanges();
                    tran.Commit();
                    result = true;
                }
                catch(Exception e)
                {
                    string ss = e.Message;
                    tran.Rollback();//回滚事务
                                    // db.Connection.Close();
                    result = false;
                }
            }
            Funs.DB.Connection.Close();
            return result;
        }
        #endregion
        
        #region 事务提交 删除
        /// 
        /// 事物提交
        /// 
        /// 
        /// 
        /// 
        /// 
        public static bool Delete(string EmailId)
        {
            bool result = true;
            if (EmailId == null)
                return false;
            Funs.DB.Connection.Close();
            Funs.DB.Connection.Open();
            Funs.DB.CommandTimeout = 30000;
            using (DbTransaction tran = Funs.DB.Connection.BeginTransaction())
            {
                Funs.DB.Transaction = tran;
                try
                {
                    Model.Email_SendTemplate newsendTemplate = Funs.DB.Email_SendTemplate.FirstOrDefault(x => x.EmailId == EmailId);
                    Funs.DB.Email_SendTemplate.DeleteOnSubmit(newsendTemplate);
                    Funs.DB.SubmitChanges();
                    if (newsendTemplate != null)
                    {
                        // var list = (from x in Funs.DB.Em_toPeople where x.EmuserID == newsendTemplate.EmailId select x).ToList();
                        var list = (from x in Funs.DB.Email_ToPeople where x.EmtempID == EmailId select x).ToList();
                        if (list == null || list.Count == 0)
                        { }
                        else { 
                            Funs.DB.Email_ToPeople.DeleteAllOnSubmit(list);
                        }
                    }
                    Funs.DB.SubmitChanges();
                    tran.Commit();
                    result = true;
                }
                catch
                {
                    tran.Rollback();//回滚事务
                                    // db.Connection.Close();
                    result = false;
                }
            }
            Funs.DB.Connection.Close();
            return result;
        }
        #endregion
    }
}