using Microsoft.IdentityModel.Tokens;
using PowerAccounting.Models2;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Text;

namespace IPROTECHWEBSITE.Util
{
    public class ValidateToken
    {
        public (bool, string) validate(string token, db_a63a88_iprotechContext _context)
        {
            try
            {
                var tokenHandler = new JwtSecurityTokenHandler();
                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("ByYM000OLlMQG6VVVp1OH7Xzyr7gHuw1qvUC5dcGt3SNM"));
                tokenHandler.ValidateToken(token, new TokenValidationParameters
                {
                    ValidateAudience = true,
                    ValidateIssuer = true,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = key,
                    ClockSkew = TimeSpan.Zero,
                    ValidIssuer = "https://localhost:7152",
                    ValidAudience = "https://localhost:7152"
                }, out SecurityToken validateToken);
                var jwtToken = (JwtSecurityToken)validateToken;
                var userid = jwtToken.Claims.FirstOrDefault(_ => _.Type == "id").Value;
                var user = _context.AspNetUsers.Find(userid);
                if (user == null) return (false, "لم يتم العثور على حسابك");
                try
                {

                    var tekn = _context.AspNetUserTokens.Where(p => p.UserId == user.Id && p.LoginProvider == "Api" && p.Name == "ApiToken").FirstOrDefault();
                    if (tekn == null) return (false, "يجب تسجيل الدخول مجددا ثم المحاولة"); 
                    if (tekn.Value != token) return(false, "يجب تسجيل الدخول مجددا ثم المحاولة");
                  
                    return (true, user.Id);

                }
                catch (Exception ex)
                {
                    return (false, "حدث خطاء اثناء التحقق من حسابك");
                }
            }
            catch (Exception)
            {

                return (false, "انتهت مهلة الاتصال يجب ان تسجل دخول مجدد في التطبيق ثم معاودة المحاولة");
            }

        }
    }
}
