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

import com.airlock.iam.base.api.domain.model.validation.GenericError;
import com.airlock.iam.base.api.domain.model.validation.ValidationResult;
import com.airlock.iam.base.api.domain.model.validation.ValidatorError;
import com.airlock.iam.flow.api.domain.model.step.GenericStepError;
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.domain.model.ValidationStepResultData;
import java.util.Map;

public interface UserIdentifyingStep extends IdentityProvidingFlowStep {
   StepResult identifyUser(String var1);

   default StepResult identifyUserByUserData(Map<String, String> userData) {
      return this.stepResultFactory()
         .failRetry(GenericStepError.VALIDATION_FAILED, UserIdentifyingStep.UserIdentifyingStepAction.USERNAME_REQUIRED)
         .resultData(new ValidationStepResultData(ValidationResult.invalid(ValidatorError.validatorError("username", GenericError.REQUIRED))))
         .build();
   }

   default StepAction stepAction() {
      return UserIdentifyingStep.UserIdentifyingStepAction.USERNAME_REQUIRED;
   }

   enum UserIdentifyingStepAction implements StepAction {
      USERNAME_REQUIRED,
      USER_DATA_REQUIRED;
   }

   enum UserIdentifyingStepError implements StepError {
      USER_NOT_FOUND;
   }
}
