using OmsorgCore.Application.Models;

namespace OmsorgCore.Application.Services;

public interface IAuthService
{
    Task<AuthResult> LoginAsync(string username, string password, string ipAddress, CancellationToken cancellationToken = default);

    /// <summary>Löst den vorgelegten Refresh-Token ein: widerruft ihn und stellt ein neues Token-Paar aus (Rotation).</summary>
    Task<AuthResult> RefreshAsync(string refreshToken, CancellationToken cancellationToken = default);

    /// <summary>Widerruft einen Refresh-Token (Logout). Idempotent, kein Fehler bei unbekanntem/bereits widerrufenem Token.</summary>
    Task RevokeAsync(string refreshToken, CancellationToken cancellationToken = default);

    /// <summary>Profil (Username, Rolle, aufgelöste Rechte) des eingeloggten Users, für `/api/auth/me`.</summary>
    Task<UserProfile?> GetProfileAsync(Guid userId, CancellationToken cancellationToken = default);
}
