package com.airlock.iam.authentication.api.domain.model.step;

import com.airlock.iam.common.api.domain.model.authentication.factor.AuthenticationFactor;
import com.airlock.iam.common.api.domain.model.authentication.factor.AuthenticationFactorDetail;
import com.airlock.iam.common.api.domain.model.device.usage.AuthenticationDeviceUsage;
import com.airlock.iam.flow.api.domain.model.step.AdditionalAttributes;
import com.airlock.iam.flow.api.domain.model.step.InternalStepResultData;
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.api.domain.model.step.StepResultBuilder;
import com.airlock.iam.flow.api.domain.model.step.StepResultData;
import com.airlock.iam.flow.api.domain.model.tag.Tag;
import java.util.Map;
import java.util.Set;

public interface AuthenticationStepResultBuilder extends StepResultBuilder {
   AuthenticationStepResultBuilder type(StepResult.StepResultType var1);

   AuthenticationStepResultBuilder nextAction(StepAction var1);

   AuthenticationStepResultBuilder error(StepError var1);

   AuthenticationStepResultBuilder obtainedTags(Set<Tag> var1);

   AuthenticationStepResultBuilder addObtainedTags(Set<Tag> var1);

   AuthenticationStepResultBuilder resultData(StepResultData var1);

   AuthenticationStepResultBuilder withoutInternalResultData();

   AuthenticationStepResultBuilder internalResultData(InternalStepResultData var1);

   AuthenticationStepResultBuilder metadata(Map<String, Object> var1);

   AuthenticationStepResultBuilder addMetadataItem(String var1, Object var2);

   AuthenticationStepResultBuilder additionalAttributes(AdditionalAttributes var1);

   default AuthenticationStepResultBuilder clearAdditionalAttributes() {
      return this.additionalAttributes(new AdditionalAttributes());
   }

   AuthenticationStepResultBuilder addAdditionalAttribute(String var1, Object var2);

   AuthenticationStepResultBuilder factor(AuthenticationFactor var1);

   AuthenticationStepResultBuilder factorDetail(AuthenticationFactorDetail var1);

   AuthenticationStepResultBuilder isFailedFactor(boolean var1);

   AuthenticationStepResultBuilder deviceUsageData(AuthenticationDeviceUsage var1);

   AuthenticationStepResult build();
}
