using APT.Infrastructure.Core;
using APT.Utility;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Threading;
namespace APT.Utility
{
    /// 
    /// WebApi Session实现类
    /// 
    public class AspNetSessionProvider : ISession, ISessionProvider
    {
        private readonly SessionData sessionData;
        public AspNetSessionProvider()
        {
            try
            {
                var token = Infrastructure.Core.HttpContext.Current.Request.Headers["Authorization"].ToString().Replace("Bearer ", string.Empty);
                var userId = Infrastructure.Core.HttpContext.Current.Request.Headers["userid"].ToString();
                var orgIdStr = Infrastructure.Core.HttpContext.Current.Request.Headers["orgId"].ToString();
                if (!string.IsNullOrEmpty(token) && !string.IsNullOrEmpty(userId) && userId != "null")
                {
                    JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
                    //var user = handler.ReadJwtToken(token);
                    //var info = handler.ReadToken(token);
                    //var UserClaim = user.Payload["UserData"] == null ? "{}" : user.Payload["UserData"].ToString();
                    Guid? orgId = null;
                    if (!string.IsNullOrEmpty(orgIdStr))
                        orgId = new Guid(orgIdStr);
                    sessionData = new SessionData
                    {
                        UserId = new Guid(userId),
                        OrgId = orgId,
                    };
                }
            }
            catch { }
            //throw new Exception("令牌过期");
        }
        #region ISessionProvider 成员
        /// 
        /// 获取会话对象
        /// 
        /// 
        public ISession GetSession()
        {
            return this;
        }
        #endregion
        #region ISession 成员
        /// 
        /// 用户ID
        /// 
        public string UserId
        {
            get
            {
                return sessionData == null || sessionData.UserId == null ? null : sessionData.UserId.ToString();
            }
            set
            {
            }
        }
        /// 
        /// 用户ID
        /// 
        public Guid? UserID
        {
            get
            {
                if (string.IsNullOrEmpty(this.UserId))
                    return null;
                return Guid.Parse(this.UserId);
            }
            set
            {
            }
        }
        /// 
        /// 用户编号
        /// 
        public string UserCode
        {
            get
            {
                return sessionData == null ? null : sessionData.UserCode;
            }
            set { }
        }
        /// 
        /// 用户名称
        /// 
        public string UserName
        {
            get
            {
                return sessionData == null ? null : sessionData.UserName;
            }
            set
            {
            }
        }
        /// 
        /// 部门ID
        /// 
        public string DepartmentId
        {
            get
            {
                return sessionData == null || sessionData.DepartmentId == null ? null : sessionData.DepartmentId.ToString();
            }
            set
            {
            }
        }
        /// 
        /// 部门ID
        /// 
        public Guid? DepartmentID
        {
            get
            {
                if (string.IsNullOrEmpty(this.DepartmentId))
                    return null;
                return Guid.Parse(this.DepartmentId);
            }
            set
            {
            }
        }
        public Guid? OrgId
        {
            get
            {
                return sessionData == null ? null : sessionData.OrgId;
            }
            set
            {
            }
        }
        public Guid? RootOrgId
        {
            get
            {
                return sessionData == null ? null : sessionData.RootOrgId;
            }
            set
            {
                if (sessionData != null) sessionData.RootOrgId = value;
            }
        }
        #endregion
    }
}