using Meezi.API.Models.Auth; namespace Meezi.API.Services; public interface IAuthService { Task<(bool Success, SendOtpResponse? Data, string? ErrorCode, string? ErrorMessage)> SendOtpAsync( SendOtpRequest request, CancellationToken cancellationToken = default); /// /// Returns either an AuthTokenResponse (single café) or error code CHOOSE_CAFE /// with CafeChoicesResponse serialised in ErrorMessage when multiple cafés found. /// Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage, CafeChoicesResponse? Choices)> VerifyOtpAsync( VerifyOtpRequest request, CancellationToken cancellationToken = default); Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage, CafeChoicesResponse? Choices)> LoginWithPasswordAsync( LoginWithPasswordRequest request, CancellationToken cancellationToken = default); /// Log in the café Owner using an admin-issued permanent recovery key. Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage)> LoginWithRecoveryKeyAsync( LoginWithRecoveryKeyRequest request, CancellationToken cancellationToken = default); Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage)> SwitchCafeAsync( string employeeId, string targetCafeId, CancellationToken cancellationToken = default); /// /// Re-issue a token scoped to a different branch within the current café. /// null means café-wide (Owner only). /// Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage)> SwitchBranchAsync( string employeeId, string cafeId, string? targetBranchId, CancellationToken cancellationToken = default); Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage)> RefreshAsync( RefreshTokenRequest request, CancellationToken cancellationToken = default); Task<(bool Success, SendOtpResponse? Data, string? ErrorCode, string? ErrorMessage)> RegisterAsync( RegisterRequest request, CancellationToken cancellationToken = default); Task<(bool Success, AuthTokenResponse? Data, string? ErrorCode, string? ErrorMessage)> VerifyRegisterAsync( VerifyRegisterRequest request, CancellationToken cancellationToken = default); }