namespace BLL
{
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI.WebControls;

    public class Sys_UserService
    {
        /// <summary>
        /// 用户登陆方法
        /// </summary>
        /// <param name="loginname">登陆名</param>
        /// <param name="password">未加密密码</param>
        /// <param name="rememberMe">记住我开关</param>
        /// <param name="page">调用页面</param>
        /// <returns>是否登陆成功</returns>
        public static bool UserLogOn(string account, string password, bool rememberMe, System.Web.UI.Page page)
        {
            string https = ConfigurationManager.AppSettings["Https"];
            bool IsSuccess = false;
            var q = from y in Funs.DB.Sys_User where y.Account == account select y;
            List<Model.Sys_User> x = null;
            if (q.Count() > 0)
            {
                x = (from y in Funs.DB.Sys_User
                     where y.Account == account && y.IsPost == true
                     && y.Password == EncryptionPassword(password)
                     select y).ToList();
                if (x.Any())
                {
                    FormsAuthentication.SetAuthCookie(account, false);
                    Model.Sys_User s = x.First();
                    page.Session[SessionName.CurrUser] = s;
                    //if (rememberMe)
                    //{
                    //    System.Web.HttpCookie u = new System.Web.HttpCookie("UserInfo");
                    //    u["username"] = account;
                    //    //u["password"] = null;
                    //    // Cookies过期时间设置为一年.
                    //    u.Expires = DateTime.Now.AddYears(1);
                    //    if (https == "true")
                    //    {
                    //        u.Secure = true;
                    //    }
                    //    page.Response.Cookies.Add(u);
                    //}
                    //else
                    //{
                    //    // 当选择不提交用户名时,Cookies过期时间设置为昨天.
                    //    page.Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
                    //    page.Response.Cookies["UserInfo"].Secure = true;
                    //}
                    IsSuccess = true;
                }
            }

            return IsSuccess;
        }

        /// <summary>
        /// 登陆获取用户信息
        /// </summary>
        /// <param name="account"></param>
        /// <param name="password"></param>
        /// <param name="rememberMe"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        public static bool ADUserLogOn(string account, bool rememberMe, System.Web.UI.Page page)
        {
            string https = ConfigurationManager.AppSettings["Https"];
            bool IsSuccess = false;
            var user = Funs.DB.Sys_User.FirstOrDefault(x => x.Account == account && x.IsPost == true);
            if (user != null)
            {
                FormsAuthentication.SetAuthCookie(account, false);
                page.Session[SessionName.CurrUser] = user;
                //if (rememberMe)
                //{
                //    System.Web.HttpCookie u = new System.Web.HttpCookie("UserInfo");
                //    u["username"] = account;
                //    // u["password"] = null;
                //    // Cookies过期时间设置为一年.
                //    u.Expires = DateTime.Now.AddYears(1);
                //    if (https == "true")
                //    {
                //        u.Secure = true;
                //    }
                //    page.Response.Cookies.Add(u);
                //}
                //else
                //{
                //    // 当选择不提交用户名时,Cookies过期时间设置为昨天.
                //    page.Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
                //}

                IsSuccess = true;
            }

            return IsSuccess;
        }

        /// <summary>
        /// 加密密码
        /// </summary>
        /// <param name="password">加密前的密码</param>
        /// <returns>加密后的密码</returns>
        public static string EncryptionPassword(string password)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");
        }

        /// <summary>
        /// 获取用户初始密码
        /// </summary>
        /// <param name="unitId">单位id</param>
        /// <param name="phone">手机号码</param>
        /// <returns></returns>
        public static string GetEncryptionPassword(string account)
        {
            string passNo = string.Empty;
            if (!string.IsNullOrEmpty(account))
            {
                passNo += account + ".1234";
            }
            return EncryptionPassword(passNo);
        }

        /// <summary>
        /// 获取用户信息
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <returns>用户信息</returns>
        public static Model.Sys_User GetUsersByUserId(string userId)
        {
            Model.Sys_User m = Funs.DB.Sys_User.FirstOrDefault(e => e.UserId == userId);
            return m;
        }


        /// <summary>
        /// 获取用户账号是否存在
        /// </summary>
        /// <param name="userId">用户id</param>
        /// <param name="account">账号</param>
        /// <param name="projectId">项目ID</param>
        /// <returns>是否存在</returns>
        public static bool IsExistUserAccount(string userId, string account)
        {
            bool isExist = false;
            if (!string.IsNullOrEmpty(userId))
            {
                var user = Funs.DB.Sys_User.FirstOrDefault(x => x.Account == account && x.UserId != userId);
                if (user != null)
                {
                    isExist = true;
                }
            }
            else
            {
                var user = Funs.DB.Sys_User.FirstOrDefault(x => x.Account == account);
                if (user != null)
                {
                    isExist = true;
                }
            }

            return isExist;
        }

        /// <summary>
        /// 获取同单位用户名称是否存在
        /// </summary>
        /// <param name="userId">用户id</param>
        /// <param name="userName">账号</param>
        /// <param name="unitId">项目ID</param>
        /// <returns>是否存在</returns>
        public static bool IsExistUserName(string userId, string userName)
        {
            bool isExist = false;
            var name = Funs.DB.Sys_User.FirstOrDefault(x => x.UserName == userName && x.UserId != userId);
            if (name != null)
            {
                isExist = true;
            }
            return isExist;
        }

        /// <summary>
        /// 根据部门获取用户信息
        /// </summary>
        /// <param name="departId"></param>
        /// <returns></returns>
        public static List<Model.Sys_User> GetUsersByDep(string departId)
        {
            return (from x in Funs.DB.Sys_User where x.DepartId == departId select x).ToList();
        }

        /// <summary>
        /// 根据用户ID获取名称
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public static string GetUserNameByUserId(string userId)
        {
            string userName = string.Empty;
            Model.Sys_User m = Funs.DB.Sys_User.FirstOrDefault(e => e.UserId == userId);
            if (m != null)
            {
                userName = m.UserName;
            }
            return userName;
        }

        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="password"></param>
        public static void UpdatePassword(string userId, string password)
        {
            Model.Sys_User m = Funs.DB.Sys_User.FirstOrDefault(e => e.UserId == userId);
            if (m != null)
            {
                m.Password = password;
                Funs.DB.SubmitChanges();
            }
        }

        /// <summary>
        /// 增加人员信息
        /// </summary>
        /// <param name="user">人员实体</param>
        public static void AddUser(Model.Sys_User user)
        {
            Model.Sys_User newUser = new Model.Sys_User();
            newUser.UserId = user.UserId;
            newUser.Account = user.Account;
            newUser.UserCode = user.UserCode;
            newUser.Password = user.Password;
            newUser.UserName = user.UserName;
            newUser.ChineseName = user.ChineseName;
            newUser.UnitId = user.UnitId;
            newUser.RoleId = user.RoleId;
            newUser.IsPost = user.IsPost;
            newUser.DepartId = user.DepartId;
            newUser.Email = user.Email;
            newUser.EmailPassword = user.EmailPassword;
            newUser.Phone = user.Phone;
            newUser.Remark = user.Remark;
            newUser.Address = user.Address;

            Funs.DB.Sys_User.InsertOnSubmit(newUser);
            Funs.DB.SubmitChanges();
        }

        /// <summary>
        /// 修改人员信息
        /// </summary>
        /// <param name="user">人员实体</param>
        public static void UpdateUser(Model.Sys_User user)
        {
            Model.Sys_User newUser = Funs.DB.Sys_User.FirstOrDefault(e => e.UserId == user.UserId);
            if (newUser != null)
            {
                newUser.Account = user.Account;
                newUser.UserCode = user.UserCode;
                //newUser.Password = user.Password;
                newUser.UserName = user.UserName;
                newUser.ChineseName = user.ChineseName;
                newUser.UnitId = user.UnitId;
                newUser.RoleId = user.RoleId;
                newUser.IsPost = user.IsPost;
                newUser.DepartId = user.DepartId;
                newUser.Email = user.Email;
                if (!String.IsNullOrEmpty(user.EmailPassword))
                {
                    newUser.EmailPassword = user.EmailPassword;
                }
                newUser.Phone = user.Phone;
                newUser.Remark = user.Remark;
                newUser.Address = user.Address;

                Funs.DB.SubmitChanges();
            }
        }

        /// <summary>
        /// 根据主键删除用户信息
        /// </summary>
        /// <param name="userId"></param>
        public static void DeleteUserById(string userId)
        {
            Model.Sys_User u = Funs.DB.Sys_User.FirstOrDefault(e => e.UserId == userId);
            if (u != null)
            {
                Funs.DB.Sys_User.DeleteOnSubmit(u);
                Funs.DB.SubmitChanges();
            }
        }

        /// <summary>
        /// 根据帐号获取用户信息
        /// </summary>
        /// <param name="account">帐号</param>
        /// <returns>用户信息</returns>
        public static Model.Sys_User GetUserByAccount(string account)
        {
            Model.Sys_User m = Funs.DB.Sys_User.FirstOrDefault(e => e.Account == account);
            return m;
        }

        /// <summary>
        /// 根据部门获得所有对应在岗的用户且参与流程
        /// </summary>
        /// <returns></returns>
        public static List<Model.Sys_User> GetUserListByDepartId(string departId)
        {
            var q = (from x in Funs.DB.Sys_User
                     where x.IsPost == true && x.DepartId == departId
                     orderby x.UserName
                     select x).ToList();
            return q;
        }

        /// <summary>
        /// 查询所有在岗的用户
        /// </summary>
        /// <returns></returns>
        public static List<Model.Sys_User> GetUserList()
        {
            return (from x in Funs.DB.Sys_User where x.IsPost == true && x.Account != "gly" orderby x.UserName select x).ToList();
        }

        /// <summary>
        /// 根据角色获得最大编号的在岗用户
        /// </summary>
        /// <returns></returns>
        public static Model.Sys_User GetMaxUserByRoleId(string roleId)
        {
            return (from x in Funs.DB.Sys_User where x.IsPost == true && x.RoleId == roleId && (x.UserCode != "" && x.UserCode != null) orderby x.UserCode descending select x).FirstOrDefault();
        }

        /// <summary>
        /// 获取用户视图列表信息
        /// </summary>
        /// <returns></returns>
        public static List<Model.View_Sys_Users> GetUserViewList()
        {
            return (from x in Funs.DB.View_Sys_Users where x.IsPost == true orderby x.DepartName, x.UserName select x).ToList();
        }

        /// <summary>
        /// 常量表下拉框
        /// </summary>
        /// <param name="dropName">下拉框名字</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        public static void InitUserDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease)
        {
            dropName.DataGroupField = "DepartName";
            dropName.DataValueField = "UserId";
            dropName.DataTextField = "UserName";
            dropName.DataSource = BLL.Sys_UserService.GetUserViewList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }

        /// <summary>
        /// 根据用户名获取用户信息
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public static Model.Sys_User getUserIdByUserName(string userName)
        {
            return Funs.DB.Sys_User.FirstOrDefault(e => e.UserName == userName);
        }

        /// <summary>
        /// 根据角色获取用户信息
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public static List<Model.Sys_User> getUserListByRoleId(string roleId, bool isShowPost)
        {
            if (isShowPost)
            {
                return (from x in Funs.DB.Sys_User where x.RoleId == roleId && x.IsPost == isShowPost select x).ToList();
            }
            else
            {
                return (from x in Funs.DB.Sys_User where x.RoleId == roleId  select x).ToList();
            }
        }

        public static void UpdateUserList(Model.Sys_User user)
        {
            Model.Sys_User newUser = Funs.DB.Sys_User.FirstOrDefault(e => e.Account == user.Account);
            if (newUser != null)
            {
                newUser.DepartId = user.DepartId;
                newUser.ChineseName = user.ChineseName;
                newUser.Email = user.Email;
                newUser.Address = user.Address;
                Funs.DB.SubmitChanges();
            }
        }
    }
}