using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Znyc.CloudCar.Configuration;
using Znyc.CloudCar.Utility.Helper;

namespace Znyc.CloudCar.Auth.Policys
{

    /// <summary>
    /// JWTToken生成类
    /// </summary>
    public class JwtToken
    {
        public static string Create(Claim[] claims)
        {
            SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSettingsConstVars.JwtConfigSecretKey));
            SigningCredentials signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            string timestamp = DateTime.Now.AddMinutes(AppSettingsConstVars.JwtConfigExpires).ToTimestamp()
                .ToString();
            claims = claims.Append(new Claim(Claims.RefreshExpires, timestamp)).ToArray();

            JwtSecurityToken token = new JwtSecurityToken(
                AppSettingsConstVars.JwtConfigIssuer,
               AppSettingsConstVars.JwtConfigAudience,
                claims,
                DateTime.Now,
                DateTime.Now.AddMinutes(AppSettingsConstVars.JwtConfigExpires),
                signingCredentials
            );
            return new JwtSecurityTokenHandler().WriteToken(token);
        }

        public Claim[] Decode(string jwtToken)
        {
            JwtSecurityTokenHandler jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
            JwtSecurityToken jwtSecurityToken = jwtSecurityTokenHandler.ReadJwtToken(jwtToken);
            return jwtSecurityToken?.Claims?.ToArray();
        }
    }
}