package com.sun.identity.federation.common;

import com.sun.identity.common.SystemConfigurationUtil;
import com.sun.identity.shared.configuration.SystemPropertiesManager;
import com.sun.identity.shared.debug.Debug;
import jakarta.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

public final class FSUtils {
   private static final Debug DEBUG = Debug.getInstance("libSAML2");
   private static final String SERVER_PROTOCOL = SystemPropertiesManager.get("com.iplanet.am.server.protocol");
   private static final String SERVER_HOST = SystemPropertiesManager.get("com.iplanet.am.server.host");
   private static final String SERVER_PORT = SystemPropertiesManager.get("com.iplanet.am.server.port");
   private static final String SERVER_URI = SystemPropertiesManager.get("com.iplanet.am.services.deploymentDescriptor");
   private static final String LOCAL_URL = SERVER_PROTOCOL + "://" + SERVER_HOST + ":" + SERVER_PORT + SERVER_URI;

   private FSUtils() {
   }

   public static List<String> getRemoteServiceURLs(HttpServletRequest request) {
      String requestURL = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
      if (DEBUG.messageEnabled()) {
         DEBUG.message("FSUtils.getRemoteServiceURLs: requestURL = " + requestURL);
      }

      List<String> serverList = null;

      try {
         serverList = SystemConfigurationUtil.getServerList();
         List<String> siteList = SystemConfigurationUtil.getSiteList();
         if (DEBUG.messageEnabled()) {
            DEBUG.message("FSUtils.getRemoteServiceURLs: servers=" + serverList + ", siteList=" + siteList);
         }

         serverList.removeAll(siteList);
         if (DEBUG.messageEnabled()) {
            DEBUG.message("FSUtils.getRemoteServiceURLs: new servers=" + serverList);
         }
      } catch (Exception ex) {
         if (DEBUG.messageEnabled()) {
            DEBUG.message("FSUtils.getRemoteServiceURLs:", ex);
         }
      }

      if (serverList == null) {
         return new ArrayList<>();
      }

      List<String> remoteServiceURLs = new ArrayList<>();

      for (String server : serverList) {
         if (!server.equalsIgnoreCase(requestURL) && !server.equalsIgnoreCase(LOCAL_URL)) {
            remoteServiceURLs.add(server);
         }
      }

      if (DEBUG.messageEnabled()) {
         DEBUG.message("FSUtils.getRemoteServiceURLs: remoteServiceURLs = " + remoteServiceURLs);
      }

      return remoteServiceURLs;
   }
}
