using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components.Authorization;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using wispro.sp.web.Auth;
using wispro.sp.web.Models;
using wispro.sp.web.Utils;
using System.Security.Claims;

namespace wispro.sp.web.Services
{
    public interface IUserService
    {
        CurrentUser CurrentUser { get; set; }
    }

    public class UserService : IUserService
    {
        private readonly HttpClient _httpClient;
        private readonly ILocalStorageService _localStorageService;
        private CurrentUser _CurrentUser= new CurrentUser() { Name = "" };

        public UserService(HttpClient httpClient, ILocalStorageService localStorageService)
        {
            _httpClient = httpClient;
            _localStorageService = localStorageService;
        }


        public CurrentUser CurrentUser
        {
            get
            {
                return _CurrentUser;
            }
            set
            {
                _CurrentUser = value;
            }
            
        }

        public async Task<CurrentUser> GetUser()
        {
            CurrentUser _user = new CurrentUser();
            var tokenInLocalStorage = await _localStorageService.GetItemAsStringAsync("authToken");
            var claims = JwtParser.ParseClaimsFromJwt(tokenInLocalStorage);

            foreach (Claim claim in claims)
            {
                if (claim.Type == ClaimTypes.Name )
                {
                    _user.Name = claim.Value;
                    break;
                }
            }

            return _user;
        }

        
    }
}