using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

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