namespace Tiku.Application.Auth;

public sealed record WechatProviderOptions(
    string AppId,
    string AppSecret);

public sealed record WechatIdentity(
    string OpenId,
    string? UnionId,
    string? Nickname,
    string? AvatarUrl,
    string? SessionKey,
    string RawJson);

public interface IWechatOAuthClient
{
    Task<WechatIdentity> ExchangeWebCodeAsync(
        WechatProviderOptions options,
        string code,
        CancellationToken cancellationToken = default);

    Task<WechatIdentity> ExchangeMiniAppCodeAsync(
        WechatProviderOptions options,
        string code,
        CancellationToken cancellationToken = default);
}