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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.flow.api.domain.model.session.FlowSession;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.flow.api.domain.model.step.FlowStep;
import com.airlock.iam.flow.api.domain.model.step.StepResult;
import com.airlock.iam.flow.shared.application.configuration.step.RedFlagRaisingStepConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(RedFlagRaisingStepConfig.class)
public class RedFlagRaisingStep implements FlowStep {
   private final Provider<FlowSession> flowSession;
   private final Provider<FlowCondition> condition;
   private final RedFlagRaisingStepConfig config;

   @Inject
   public RedFlagRaisingStep(Provider<FlowSession> flowSession, Provider<FlowCondition> condition, RedFlagRaisingStepConfig config) {
      this.flowSession = flowSession;
      this.condition = condition;
      this.config = config;
   }

   @Override
   public StepResult initialize() {
      if (((FlowCondition)this.condition.get()).isFulfilled()) {
         ((FlowSession)this.flowSession.get()).raiseRedFlag(this.config.getRedFlag().toRedFlag());
      }

      return this.stepResultFactory().success().build();
   }

   @Override
   public String getDescription() {
      return "Red Flag Raising Step";
   }
}
