package com.airlock.iam.oauth2.domain.model.accountlinking;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.flow.api.domain.model.session.FlowSession;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.oauth2.application.configuration.accountlinking.AccountLinkingRequiredConditionConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(AccountLinkingRequiredConditionConfig.class)
public class AccountLinkingRequiredCondition implements FlowCondition {
   private final Provider<FlowSession> flowSession;
   private final AccountLinkingRequiredConditionConfig config;

   @Inject
   public AccountLinkingRequiredCondition(Provider<FlowSession> flowSession, AccountLinkingRequiredConditionConfig config) {
      this.flowSession = flowSession;
      this.config = config;
   }

   @Override
   public boolean isFulfilled() {
      return ((FlowSession)this.flowSession.get()).getRedFlags().contains(this.config.getRedFlag().toRedFlag());
   }

   @Override
   public String displayName() {
      return "Has Red Flag " + LogUtil.quote(this.config.getRedFlag().getName());
   }
}
