package com.airlock.iam.flow.shared.domain.model.airlock2fa;

import com.airlock.iam.airlock2fa.api.domain.model.Airlock2FADeviceId;
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.FlowStep;
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;

public interface Airlock2FAApprovalStep extends FlowStep {
   StepResult checkOtp(Airlock2FAOtp var1);

   StepResult retrieveOfflineQrCode();

   StepResult retrieveMobileOnlyChallenge();

   StepResult pollOnlineValidation(boolean var1);

   StepResult switchToOffline();

   StepResult listDevices();

   StepResult selectDevice(Airlock2FADeviceId var1);

   StepResult checkPasscode(Airlock2FAPasscode var1);

   interface Airlock2FAApprovalStepActions {
      StepAction pollingRequired();

      StepAction qrCodeOtpRequired();

      StepAction pollingOrOfflineRequired();

      StepAction deviceChoiceRequired();

      StepAction mobileOnlyChallengeRetrievalRequired();

      StepAction passcodeRequired();
   }

   interface Airlock2FAApprovalStepErrors {
      StepError qrCodeOtpWrong();

      StepError deviceChoiceFailed();

      StepError approvalFailed();

      StepError passcodeWrong();
   }
}
