namespace TakeoutSaaS.Application.Identity.Abstractions;

/// <summary>
/// 微信 code2Session 服务契约。
/// </summary>
public interface IWeChatAuthService
{
    /// <summary>
    /// 调用微信接口完成 code2Session 交换。
    /// </summary>
    /// <param name="code">临时登录凭证 code。</param>
    /// <param name="cancellationToken">取消标记。</param>
    /// <returns>会话信息。</returns>
    Task<WeChatSessionInfo> Code2SessionAsync(string code, CancellationToken cancellationToken = default);
}

/// <summary>
/// 微信会话信息。
/// </summary>
public sealed class WeChatSessionInfo
{
    /// <summary>
    /// OpenId。
    /// </summary>
    public string OpenId { get; init; } = string.Empty;

    /// <summary>
    /// UnionId。
    /// </summary>
    public string? UnionId { get; init; }

    /// <summary>
    /// 会话密钥。
    /// </summary>
    public string SessionKey { get; init; } = string.Empty;
}
