package com.airlock.iam.common.domain.model.principal;

import com.airlock.iam.common.api.domain.model.authmethod.AuthenticationMethod;
import com.airlock.iam.common.api.domain.model.user.PersistentUser;
import com.airlock.iam.common.api.domain.model.user.User;
import com.airlock.iam.common.api.domain.model.user.UserIdentity;
import com.airlock.iam.common.api.domain.model.user.validity.UserValidity;
import com.airlock.iam.common.domain.model.user.Lockable;
import java.util.Collection;
import java.util.Optional;
import java.util.OptionalInt;

public interface UserPrincipal extends User {
   Optional<UserIdentity> getIdentity();

   PersistentUser user();

   Optional<PersistentUser> userOptional();

   boolean exists();

   boolean hasUserId(UserIdentity var1);

   Optional<Lockable> asLockable();

   Optional<UserValidity> getValidity();

   void increaseFailedLogins(AuthenticationMethod var1);

   void resetFailedLogins(Collection<AuthenticationMethod> var1);

   OptionalInt getRemainingAttempts(AuthenticationMethod var1);
}
