package com.airlock.iam.transactionapproval.infrastructure.logging;

import com.airlock.iam.flow.shared.api.domain.model.session.UserSession;
import com.airlock.iam.log.processor.LogMessageProcessor;
import com.airlock.iam.transactionapproval.domain.model.authenticateduser.AuthenticatedUser;
import com.airlock.iam.transactionapproval.domain.model.authenticateduser.AuthenticatedUserAttribute;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

public final class TransactionApprovalLogMessageProcessor implements LogMessageProcessor {
   private final Provider<UserSession> session;

   @Inject
   public TransactionApprovalLogMessageProcessor(Provider<UserSession> session) {
      this.session = session;
   }

   public String adaptLogMessage(String logMessage) {
      Optional<AuthenticatedUser> authenticatedUser = ((UserSession)this.session.get())
         .findUserSessionAttribute(AuthenticatedUserAttribute.class)
         .map(AuthenticatedUserAttribute::authenticatedUser);
      return authenticatedUser.isPresent() ? "Transaction Approval by " + authenticatedUser.get().id() + ": " + logMessage : logMessage;
   }
}
