package com.airlock.iam.admin.application.service.token.oathotp;

import com.airlock.iam.admin.domain.model.token.oathotp.OathOtpActivationLetter;
import com.airlock.iam.admin.domain.model.token.oathotp.OathOtpActivationLetterOrder;
import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.common.api.domain.model.token.exception.TokenCountLimitException;
import com.airlock.iam.common.domain.model.token.oathotp.OathOtpToken;
import java.util.Optional;

public interface OathOtpTokenService {
   OathOtpToken createToken(UserId var1) throws TokenCountLimitException;

   Optional<OathOtpToken> retrieveToken(UserId var1);

   boolean deleteToken(UserId var1);

   boolean hasToken(UserId var1);

   boolean isAvailableForAdministration(UserId var1);

   Optional<OathOtpActivationLetter> getActivationLetter(UserId var1);

   OathOtpActivationLetterOrder getActivationLetterOrder(UserId var1);

   void orderActivationLetter(UserId var1);

   void unorderActivationLetter(UserId var1);

   OathOtpTokenService.OathOtpTokenType getTokenType();

   enum OathOtpTokenType {
      TIME_BASED,
      EVENT_BASED;
   }
}
