package com.airlock.iam.saml2.infrastructure.plugin;

import com.airlock.iam.saml2.application.configuration.SamlConfig;
import com.airlock.iam.saml2.infrastructure.util.Saml2LoginappConfigProvider;
import com.airlock.iam.saml2.infrastructure.util.Saml2RequestThreadContext;
import com.sun.identity.shared.configuration.ISystemProperties;
import java.util.Collection;
import java.util.Optional;
import java.util.Properties;

public class LoginappSystemPropertiesAdapter implements ISystemProperties {
   private final FlowLoginappSystemPropertiesAdapter flowSystemProperties = new FlowLoginappSystemPropertiesAdapter();

   @Override
   public void initializeProperties(Properties properties) {
      this.choose().initializeProperties(properties);
   }

   @Override
   public Collection<String> getServerList() throws Exception {
      return this.choose().getServerList();
   }

   @Override
   public void initializeProperties(String propertyName, String propertyValue) {
      this.choose().initializeProperties(propertyName, propertyValue);
   }

   @Override
   public String get(String key) {
      return this.choose().get(key);
   }

   private ISystemProperties choose() {
      Optional<SamlConfig> samlSettings = Saml2LoginappConfigProvider.getSamlConfig(Saml2RequestThreadContext.getConfigurationContext());
      return samlSettings.isPresent() ? this.flowSystemProperties : this.getMinimalSystemProperties();
   }

   private ISystemProperties getMinimalSystemProperties() {
      return new MinimalLoginappSystemPropertiesAdapter();
   }
}
