package com.airlock.iam.login.rest.infrastructure.logger;

import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.common.api.domain.model.user.RepresenterId;
import com.airlock.iam.common.api.domain.model.user.UserIdentity;
import com.airlock.iam.common.domain.model.user.PrincipalInfo;
import com.airlock.iam.log.processor.LogMessageProcessor;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

public final class RepresentationLogMessageProcessor implements LogMessageProcessor {
   private static final String REPRESENTER_SUFFIX_TEMPLATE = " - [represented by %s]";
   private final Provider<PrincipalInfo> principalInfo;

   @Inject
   public RepresentationLogMessageProcessor(Provider<PrincipalInfo> principalInfo) {
      this.principalInfo = principalInfo;
   }

   public String adaptLogMessage(String logMessage) {
      return ((PrincipalInfo)this.principalInfo.get())
         .getKnownIdentity()
         .flatMap(UserIdentity::representerId)
         .map(representerId -> this.adapt(logMessage, representerId))
         .orElse(logMessage);
   }

   private String adapt(String originalLogMessage, RepresenterId representerId) {
      return originalLogMessage + String.format(" - [represented by %s]", LogUtil.quote(representerId.value()));
   }
}
