package com.airlock.iam.login.app.infrastructure.web;

import com.airlock.iam.core.misc.util.ServletUtils;
import com.airlock.iam.login.app.misc.util.ServletConfigUtils;
import com.airlock.iam.plugin.api.config.ConfigurationContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.ws.rs.core.UriBuilder;
import org.apache.commons.lang3.StringUtils;

public final class LoginappSpaServletUtils {
   public static final String APPLICATION_ACCESS_PATH = "/auth/application/access";
   public static final String SPA_LOGOUT_PATH = "/auth/logout";
   public static final String SPA_ERROR_PATH = "/error";
   public static final String SPA_REMOTE_CONSENT_CALLBACK_PATH = "/auth/oauth2/consent/confirm";

   public static String getBasePath(HttpServletRequest request) {
      return ServletUtils.getContextPathWithWAF(request, ServletConfigUtils.findGatewayConfig(ConfigurationContext.defaultContext()));
   }

   public static void redirectToSpa(HttpServletRequest request, HttpServletResponse response, String spaPath) {
      UriBuilder builder = UriBuilder.fromPath(getBasePath(request)).path("/ui/app").path(spaPath);
      String query = request.getQueryString();
      if (StringUtils.isNotEmpty(query)) {
         builder.replaceQuery(query);
      }

      ServletUtils.sendPlainRedirect(response, builder.build(new Object[0]).toASCIIString());
   }

   public static String getTitle(HttpServletRequest request) {
      SpaCustomTitle customTitle = (SpaCustomTitle)request.getServletContext().getAttribute(SpaCustomTitle.class.getName());
      return customTitle.getTitle(request);
   }

   private LoginappSpaServletUtils() {
   }
}
