package com.airlock.iam.oauth2.application.configuration.resource;

import com.airlock.iam.oauth2.api.application.configuration.claims.ClaimConditionConfig;
import com.airlock.iam.oauth2.api.domain.model.claims.conditions.ClaimCondition;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import com.airlock.iam.plugin.api.annotation.property.StringProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;

public abstract class AbstractOAuth2SingleResourceProviderConfig implements OAuth2ResourceProviderConfig {
   @StringProperty(description = "The identifier of this resource provider.", optional = false, exampleValues = {"user", "language"})
   private String identifier;
   static final String IDENTIFIER_PROPERTY = "identifier";
   @PluginProperty(
      description = "<p>This resource value will only be added to the response if the configured condition is satisfied.</p>\n<p>If no condition is configured, the resource value will always be added.</p>",
      optional = true
   )
   private ClaimConditionConfig condition;
   static final String CONDITION_PROPERTY = "condition";

   public Optional<ClaimCondition> getCondition() {
      return Optional.ofNullable(this.condition).map(ClaimConditionConfig::logic);
   }

   public String getIdentifier() {
      return this.identifier;
   }

   @SuppressFBWarnings(justification = "generated code")
   protected AbstractOAuth2SingleResourceProviderConfig() {
   }

   @SuppressFBWarnings(justification = "generated code")
   protected AbstractOAuth2SingleResourceProviderConfig(String identifier, ClaimConditionConfig condition) {
      this.identifier = identifier;
      this.condition = condition;
   }
}
