namespace Tiku.Application.Auth;

public interface IAuthService
{
    Task<AuthenticationResult> LoginWithPasswordAsync(
        PasswordLoginRequest request,
        CancellationToken cancellationToken = default);

    Task<AuthenticationResult> LoginWithSmsAsync(
        SmsLoginRequest request,
        CancellationToken cancellationToken = default);

    Task<AuthenticationResult> LoginWithWechatWebAsync(
        WechatLoginRequest request,
        CancellationToken cancellationToken = default);

    Task<AuthenticationResult> LoginWithWechatMiniAppAsync(
        WechatLoginRequest request,
        CancellationToken cancellationToken = default);

    Task<AuthTokenPair> RefreshAsync(
        RefreshSessionRequest request,
        CancellationToken cancellationToken = default);

    Task LogoutAsync(
        LogoutSessionRequest request,
        CancellationToken cancellationToken = default);

    Task LogoutAllAsync(Guid userId, CancellationToken cancellationToken = default);

    Task<AuthenticationResult> ChangeRequiredPasswordAsync(
        PasswordChangeChallengeRequest request,
        CancellationToken cancellationToken = default);

    Task<SmsSendResult> RequestPasswordResetAsync(
        PasswordResetCodeRequest request,
        CancellationToken cancellationToken = default);

    Task ResetPasswordAsync(
        PasswordResetRequest request,
        CancellationToken cancellationToken = default);

    Task<AuthenticationResult> ChangePasswordAsync(
        AuthenticatedPasswordChangeRequest request,
        CancellationToken cancellationToken = default);
}