package com.airlock.iam.factor.domain.service.fido;

import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.base.misc.result.Result;
import com.airlock.iam.factor.domain.model.fido.FidoApprovalData;
import com.airlock.iam.factor.domain.model.fido.FidoAuthTokenId;
import com.airlock.iam.factor.domain.model.fido.FidoAuthenticatorUnverifiedAssertionResponse;
import com.airlock.iam.factor.domain.model.fido.FidoPublicKeyCredentialRequestOptions;
import com.airlock.iam.factor.domain.model.fido.FidoRegisteredCredential;
import com.airlock.iam.factor.domain.model.fido.FidoRelyingParty;
import com.airlock.iam.factor.domain.model.fido.user.FidoUser;
import com.airlock.iam.factor.domain.model.fido.user.FidoUserPrincipal;
import java.util.Optional;

public interface FidoAuthenticationService {
   FidoPublicKeyCredentialRequestOptions generateChallenge(FidoUserPrincipal var1);

   FidoPublicKeyCredentialRequestOptions generateChallengeForPasswordless();

   FidoPublicKeyCredentialRequestOptions generateChallengeWithApprovalData(FidoUserPrincipal var1, FidoApprovalData var2, Optional<FidoAuthTokenId> var3);

   Result<FidoRegisteredCredential, FidoRelyingParty.FidoAuthenticationVerificationErrorCode> verifyFidoResponse(
      FidoPublicKeyCredentialRequestOptions var1, FidoUser var2, FidoAuthenticatorUnverifiedAssertionResponse var3
   );

   boolean hasEligibleFidoCredentials(UserId var1);
}
