namespace TakeoutSaaS.Application.Identity.Abstractions;

/// <summary>
/// 管理后台“重置密码链接”令牌存储。
/// </summary>
public interface IAdminPasswordResetTokenStore
{
    /// <summary>
    /// 签发一次性重置令牌。
    /// </summary>
    /// <param name="userId">目标用户 ID。</param>
    /// <param name="expiresAt">过期时间（UTC）。</param>
    /// <param name="cancellationToken">取消标记。</param>
    /// <returns>令牌值。</returns>
    Task<string> IssueAsync(long userId, DateTime expiresAt, CancellationToken cancellationToken = default);

    /// <summary>
    /// 消费一次性重置令牌（成功后即删除）。
    /// </summary>
    /// <param name="token">令牌值。</param>
    /// <param name="cancellationToken">取消标记。</param>
    /// <returns>令牌绑定的用户 ID；不存在/过期返回 null。</returns>
    Task<long?> ConsumeAsync(string token, CancellationToken cancellationToken = default);
}

