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

import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.saml2.application.configuration.SamlFederationConfig;
import com.airlock.iam.saml2.domain.model.logging.Saml2LogTypes;
import com.sun.identity.common.SystemConfigurationException;
import com.sun.identity.common.SystemConfigurationUtil;
import com.sun.identity.shared.configuration.ISystemProperties;
import java.util.List;
import java.util.Properties;

public final class MinimalLoginappSystemPropertiesAdapter implements ISystemProperties {
   private static final ELogger LOG = ELoggerFactory.getLogger(MinimalLoginappSystemPropertiesAdapter.class);

   @Override
   public String get(String key) {
      if (SamlFederationConfig.FederationProperty.XMLSIG_KEYPROVIDER.getFederationPropertiesKey().equals(key)) {
         return SamlNoCertKeyProviderImpl.class.getName();
      }

      if ("com.sun.identity.saml2.xmlsig.SignatureProvider".equals(key)) {
         return SamlSignatureProvider.class.getName();
      }

      if ("com.sun.identity.saml2.xmlenc.EncryptionProvider".equals(key)) {
         return SamlEncryptionProvider.class.getName();
      }

      if ("com.sun.identity.util.debug.provider".equals(key)) {
         return DebugProviderImpl.class.getName();
      }

      if ("com.sun.identity.plugin.log.class".equals(key)) {
         return LoggerImpl.class.getName();
      }

      if ("com.iplanet.am.server.port".equals(key)) {
         return "0";
      }

      if ("com.iplanet.am.server.protocol".equals(key)) {
         return "https";
      }

      if ("com.iplanet.am.server.host".equals(key)) {
         return "localhost";
      }

      if ("com.iplanet.am.services.deploymentDescriptor".equals(key)) {
         return "";
      }

      LOG.debug("Saml Configuration not set; returning null for key " + key);
      return null;
   }

   @Override
   public void initializeProperties(Properties properties) {
      LOG.error(Saml2LogTypes.FEDERATION_LIBRARY_MESSAGE, "initializeProperties() not supported");
      throw new UnsupportedOperationException("initializeProperties() not supported");
   }

   public List<String> getServerList() throws SystemConfigurationException {
      return SystemConfigurationUtil.getServerList();
   }

   @Override
   public void initializeProperties(String propertyName, String propertyValue) {
      LOG.error(Saml2LogTypes.FEDERATION_LIBRARY_MESSAGE, "initializeProperties() not supported");
      throw new UnsupportedOperationException("initializeProperties() not supported");
   }
}
