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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.common.domain.model.user.PrincipalInfo;
import com.airlock.iam.core.misc.cronto.CrontoHandler;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.flow.shared.application.configuration.condition.CrontoAccountConditionConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(CrontoAccountConditionConfig.class)
public final class CrontoAccountCondition implements FlowCondition {
   private final Provider<PrincipalInfo> user;
   private final CrontoHandler crontoHandler;

   @Inject
   public CrontoAccountCondition(Provider<PrincipalInfo> user, CrontoAccountConditionConfig config) {
      this.user = user;
      this.crontoHandler = config.getCrontoHandler();
   }

   @Override
   public boolean isFulfilled() {
      UserId userId = ((PrincipalInfo)this.user.get()).getKnownIdentity().orElseThrow().id();
      return this.crontoHandler.getAccountForUser(userId).isPresent();
   }

   @Override
   public String displayName() {
      return "Has Cronto Account";
   }
}
