using OmsorgCore.Domain.Entities;

namespace OmsorgCore.Application.Abstractions;

public interface ILoginAttemptRepository
{
    /// <summary>Anzahl fehlgeschlagener Versuche dieser IP seit <paramref name="since"/>.</summary>
    Task<int> CountRecentFailuresAsync(string ipAddress, DateTime since, CancellationToken cancellationToken = default);

    Task AddAsync(LoginAttempt attempt, CancellationToken cancellationToken = default);

    /// <summary>Löscht alle bisherigen Fehlversuche dieser IP - nach einem erfolgreichen Login.</summary>
    Task ClearFailuresAsync(string ipAddress, CancellationToken cancellationToken = default);

    Task SaveChangesAsync(CancellationToken cancellationToken = default);
}
