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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.common.domain.model.principal.UserPrincipal;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.flow.shared.application.configuration.condition.AuthMethodBasedConditionConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import org.apache.commons.lang3.Strings;

@LogicForConfig(AuthMethodBasedConditionConfig.class)
public class AuthMethodBasedCondition implements FlowCondition {
   private final AuthMethodBasedConditionConfig config;
   private final Provider<UserPrincipal> principal;

   @Inject
   public AuthMethodBasedCondition(AuthMethodBasedConditionConfig config, Provider<UserPrincipal> principal) {
      this.config = config;
      this.principal = principal;
   }

   @Override
   public boolean isFulfilled() {
      String userAuthMethod = ((UserPrincipal)this.principal.get()).user().getAuthMethod();
      return Strings.CS.equals(userAuthMethod, this.config.getAuthMethod());
   }

   @Override
   public String displayName() {
      return "Has Auth Method " + LogUtil.quote(this.config.getAuthMethod());
   }
}
