package com.airlock.iam.publicselfservice.domain.model.step;

import com.airlock.iam.authentication.api.domain.model.step.AuthenticationFlowStep;
import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.api.domain.model.secretquestions.SecretQuestionsAnswer;
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.StepResultData;
import java.util.List;
import java.util.Map;

public interface SecretQuestionsIdentityVerificationStep extends AuthenticationFlowStep {
   StepResult verifyAnswers(Map<String, SecretQuestionsAnswer> var1);

   StepResult retrieveQuestionKeys();

   record SecretQuestions(List<String> questions) implements StepResultData {
      private static final String QUESTIONS_KEY = "questions";

      @Override
      public MapifiedValues mapify() {
         return MapifiedValuesBuilder.mapifiedValues().putIfNotEmpty("questions", this.questions).build();
      }

      public static SecretQuestionsIdentityVerificationStep.SecretQuestions demapify(MapifiedValues values) {
         return new SecretQuestionsIdentityVerificationStep.SecretQuestions(values.getList("questions"));
      }
   }

   enum SecretQuestionsStepAction implements StepAction {
      SECRET_QUESTIONS_ANSWER_REQUIRED;
   }

   enum SecretQuestionsStepError implements StepError {
      ANSWER_WRONG;
   }
}
