package com.airlock.iam.login.infrastructure.location.propagate;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.login.api.domain.model.location.propagate.URIPropagation;
import com.airlock.iam.login.application.configuration.location.propagate.HeaderURIPropagationConfig;
import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletResponse;
import java.net.URI;

@LogicForConfig(HeaderURIPropagationConfig.class)
public final class HeaderURIPropagation implements URIPropagation {
   public static final String DEFAULT_FORWARD_URL_HEADER_NAME = "X-Forward-URL";
   private final String headerName;
   private final HttpServletResponse response;

   @Inject
   public HeaderURIPropagation(String headerName, HttpServletResponse response) {
      this.headerName = headerName;
      this.response = response;
   }

   public static HeaderURIPropagation defaultHeaderURIPropagation(HttpServletResponse response) {
      return new HeaderURIPropagation("X-Forward-URL", response);
   }

   @Override
   public void propagate(URI targetURI) {
      this.response.addHeader(this.headerName, targetURI.toASCIIString().replace(",", "%2C"));
   }
}
