package com.airlock.iam.authentication.domain.model.airlock2fa;

import com.airlock.iam.factor.domain.model.airlock2fa.otp.Airlock2FAOtp;
import com.airlock.iam.factor.domain.model.airlock2fa.otp.Airlock2FAPasscode;
import com.airlock.iam.flow.api.domain.model.step.StepAction;
import com.airlock.iam.flow.api.domain.model.step.StepError;
import com.airlock.iam.flow.api.domain.model.step.StepResult;
import com.airlock.iam.flow.shared.domain.model.airlock2fa.Airlock2FADeviceSelectionStep;

public interface Airlock2FAUserFactorAuthenticationStep extends Airlock2FAAuthenticationStep, Airlock2FADeviceSelectionStep {
   StepResult checkPasscode(Airlock2FAPasscode var1);

   StepResult listDevices();

   StepResult switchToOffline();

   StepResult retrieveZeroTouchInformation();

   StepResult retrieveOfflineQrCodeChallenge();

   StepResult checkOfflineQrCodeOtp(Airlock2FAOtp var1);

   enum Airlock2FAUserFactorAuthenticationStepAction implements StepAction {
      AIRLOCK_2FA_DEVICE_CHOICE_REQUIRED,
      AIRLOCK_2FA_POLLING_OR_OFFLINE_REQUIRED,
      AIRLOCK_2FA_PASSCODE_OR_QR_CODE_OTP_REQUIRED,
      AIRLOCK_2FA_QR_CODE_OTP_REQUIRED,
      AIRLOCK_2FA_PASSCODE_REQUIRED;
   }

   enum Airlock2FAUserFactorAuthenticationStepError implements StepError {
      AIRLOCK_2FA_PASSCODE_WRONG,
      AIRLOCK_2FA_QR_CODE_OTP_WRONG;
   }
}
