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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.domain.model.sso.SsoTicketExtractor;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.flow.shared.application.configuration.condition.SsoTicketConditionConfig;
import jakarta.inject.Inject;
import java.util.List;

@LogicForConfig(SsoTicketConditionConfig.class)
public class SsoTicketCondition implements FlowCondition {
   private static final ELogger LOG = ELoggerFactory.getLogger(SsoTicketCondition.class);
   private final List<SsoTicketExtractor> ticketExtractors;

   @Inject
   public SsoTicketCondition(List<SsoTicketExtractor> ticketExtractors) {
      this.ticketExtractors = ticketExtractors;
   }

   @Override
   public boolean isFulfilled() {
      return this.canExtractTicket();
   }

   private boolean canExtractTicket() {
      for (SsoTicketExtractor extractor : this.ticketExtractors) {
         if (extractor.extract().isPresent()) {
            return true;
         }
      }

      LOG.debug("None of the configured ticket extractors could provide a ticket.");
      return false;
   }

   @Override
   public String displayName() {
      return "SSO Ticket in Request";
   }
}
