using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Infrastructure.Identity.Options;

/// <summary>
/// JWT 配置选项。
/// </summary>
public sealed class JwtOptions
{
    /// <summary>
    /// 令牌颁发者（Issuer）。
    /// </summary>
    [Required]
    public string Issuer { get; set; } = string.Empty;

    /// <summary>
    /// 令牌受众（Audience）。
    /// </summary>
    [Required]
    public string Audience { get; set; } = string.Empty;

    /// <summary>
    /// JWT 签名密钥（至少 32 个字符）。
    /// </summary>
    [Required]
    [MinLength(32)]
    public string Secret { get; set; } = string.Empty;

    /// <summary>
    /// 访问令牌过期时间（分钟），范围：5-1440。
    /// </summary>
    [Range(5, 1440)]
    public int AccessTokenExpirationMinutes { get; set; } = 60;

    /// <summary>
    /// 刷新令牌过期时间（分钟），范围：60-20160（14天）。
    /// </summary>
    [Range(60, 1440 * 14)]
    public int RefreshTokenExpirationMinutes { get; set; } = 60 * 24 * 7;
}
