using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;

namespace Ropin.Inspection.Api.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    [Authorize]
    public class BaseController : ControllerBase
    {
        //private readonly IPushMsgService _pushMsgService;
        //public BaseController(IPushMsgService pushMsgService)
        //{
        //    _pushMsgService = pushMsgService;
        //}
        public static Guid GetUserId(ClaimsPrincipal claimsPrincipal)
        {
            try
            {
                //ClaimsPrincipal claimsPrincipal = context.HttpContext.User;
                var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
                if (claim == null || string.IsNullOrEmpty(claim.Value))
                {
                    return Guid.Empty;
                }

                return Guid.Parse(claim.Value);
                
            }
            catch
            {
                return Guid.Empty;
            }
        }

        public TsysUserDetailViewModel CurrentUser
        {
            get
            {
                if (User != null && User.Claims.ToList().Count > 0)
                {
                    var Claim = User.Claims.First(claim => claim.Type == ClaimValueTypes.String);
                    return Claim == null ? new TsysUserDetailViewModel() : JsonConvert.DeserializeObject<TsysUserDetailViewModel>(Claim.Value);
                }
                else
                {
                    return new TsysUserDetailViewModel();
                }
            }
        }
    }
}