package com.airlock.iam.authentication.infrastructure.idpropagation;

import com.airlock.iam.authentication.api.domain.model.idpropagation.ResponseAdder;
import com.airlock.iam.authentication.application.configuration.idpropagation.ForwardLocationParameterAdderConfig;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.domain.service.uri.UrlUtils;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.log.api.signing.SigningLogger;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.servlet.http.HttpServletResponse;

@LogicForConfig(ForwardLocationParameterAdderConfig.class)
public final class ForwardLocationParameterAdder implements ResponseAdder {
   private final Provider<ForwardLocationParameterAdderConfig> config;
   private final Provider<HttpServletResponse> response;
   private final SigningLogger signingLogger;

   @Inject
   public ForwardLocationParameterAdder(
      Provider<ForwardLocationParameterAdderConfig> config, Provider<HttpServletResponse> response, SigningLogger signingLogger
   ) {
      this.config = config;
      this.response = response;
      this.signingLogger = signingLogger;
   }

   @Override
   public void addToResponse(String content) {
      String ticketParameterName = ((ForwardLocationParameterAdderConfig)this.config.get()).getTicketParameterName();
      String encodedValue = UrlUtils.urlEncodeUrlParameter(ticketParameterName + "=" + content);
      ((HttpServletResponse)this.response.get()).addHeader("X-SSO", encodedValue);
      this.signingLogger.log(String.format("Added Loginapp UI forward location parameter header %s to response", LogUtil.quote(ticketParameterName)));
   }
}
