using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
namespace FutureMailAPI.Controllers
{
    /// 
    /// 基础控制器,提供通用的用户身份验证方法
    /// 
    [ApiController]
    public class BaseController : ControllerBase
    {
        /// 
        /// 获取当前用户ID
        /// 兼容OAuth中间件和JWT令牌两种验证方式
        /// 
        /// 用户ID,如果未认证则返回0
        protected int GetCurrentUserId()
        {
            var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier);
            if (userIdClaim != null && int.TryParse(userIdClaim.Value, out var userId))
            {
                return userId;
            }
            return 0;
        }
        
        /// 
        /// 获取当前用户邮箱
        /// 
        /// 用户邮箱,如果未认证则返回空字符串
        protected string GetCurrentUserEmail()
        {
            return User.FindFirst(ClaimTypes.Email)?.Value ?? string.Empty;
        }
        
        /// 
        /// 获取当前用户名
        /// 
        /// 用户名,如果未认证则返回空字符串
        protected string GetCurrentUsername()
        {
            return User.FindFirst(ClaimTypes.Name)?.Value ?? string.Empty;
        }
        
        /// 
        /// 获取当前客户端ID
        /// 
        /// 客户端ID,如果未认证则返回空字符串
        protected string GetCurrentClientId()
        {
            return User.FindFirst("client_id")?.Value ?? string.Empty;
        }
    }
}