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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.flow.shared.application.configuration.condition.BooleanConditionConfig;
import jakarta.inject.Inject;

@LogicForConfig(BooleanConditionConfig.class)
public class BooleanCondition implements FlowCondition {
   private final BooleanConditionConfig config;
   private final ValueProvider<Boolean> valueProvider;

   @Inject
   public BooleanCondition(BooleanConditionConfig config, ValueProvider<Boolean> valueProvider) {
      this.config = config;
      this.valueProvider = valueProvider;
   }

   @Override
   public boolean isFulfilled() {
      Boolean providedValue = this.valueProvider.getValue();
      return providedValue == null ? this.config.isFulfilledIfValueIsNull() : providedValue;
   }

   @Override
   public String displayName() {
      return "Boolean Value Provider Condition";
   }
}
