package com.airlock.iam.transactionapproval.domain.service;

import com.airlock.iam.common.domain.model.user.PrincipalInfo;
import com.airlock.iam.common.domain.model.user.UserIdentityLogs;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.flow.domain.service.FlowCompletionService;
import com.airlock.iam.flow.shared.api.domain.model.session.UserSession;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

public final class TransactionApprovalCompletedService implements FlowCompletionService {
   private static final ELogger LOG = ELoggerFactory.getLogger(TransactionApprovalCompletedService.class);
   private final Provider<UserSession> userSession;
   private final Provider<PrincipalInfo> principalInfo;

   @Inject
   public TransactionApprovalCompletedService(Provider<UserSession> userSession, Provider<PrincipalInfo> principalInfo) {
      this.userSession = userSession;
      this.principalInfo = principalInfo;
   }

   public void handleSuccessfulFlowCompletion() {
      LOG.debug(
         "User '"
            + UserIdentityLogs.orElseNotAvailable(((PrincipalInfo)this.principalInfo.get()).getKnownIdentity())
            + "' successfully completed transaction approval."
      );
      ((UserSession)this.userSession.get()).terminate();
   }
}
