package com.airlock.iam.common.infrastructure.factory.uriinfo;

import com.airlock.iam.elog.api.EDefaultLogType;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.ws.rs.core.UriInfo;
import java.net.URI;

final class ExternalUriInfoFromOriginalUriInfo extends ExternalUriInfoBase {
   private static final ELogger LOG = ELoggerFactory.getLogger(ExternalUriInfoFromOriginalUriInfo.class);
   private final HttpServletRequest request;

   ExternalUriInfoFromOriginalUriInfo(UriInfo uriInfo, HttpServletRequest request) {
      super(uriInfo);
      this.request = request;
   }

   @Override
   public URI getRequestUri() {
      return this.getUriInfo().getRequestUri();
   }

   @Override
   public URI getBaseUri() {
      if (this.request.getAttribute("jakarta.servlet.forward.request_uri") != null) {
         LOG.warn(EDefaultLogType.GENERIC_LOG_TYPE, "ExternalUriInfo does not support servlet forwards. Returned URIs might not be correct.");
      }

      return this.getUriInfo().getBaseUri();
   }
}
