package com.airlock.iam.transactionapproval.domain.model.parameter;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.elog.api.LogTypes;
import com.airlock.iam.flow.shared.api.domain.model.valueprovider.ValueMapProvider;
import com.airlock.iam.transactionapproval.application.configuration.parameter.TransactionApprovalParametersValueMapProviderConfig;
import com.airlock.iam.transactionapproval.domain.model.flow.TransactionApprovalMessageAttributes;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.inject.Inject;
import java.util.Map;
import java.util.Optional;

@LogicForConfig(TransactionApprovalParametersValueMapProviderConfig.class)
public class TransactionApprovalParametersValueMapProvider implements ValueMapProvider {
   private static final ELogger LOG = ELoggerFactory.getLogger(TransactionApprovalParametersValueMapProvider.class);
   private Optional<TransactionApprovalMessageAttributes> messageAttributes;

   @Inject
   public TransactionApprovalParametersValueMapProvider(Optional<TransactionApprovalMessageAttributes> messageAttributes) {
      this.messageAttributes = messageAttributes;
   }

   public Map<String, Object> provideValueMap() {
      if (this.messageAttributes.isEmpty()) {
         LOG.warn(
            LogTypes.CONFIGURATION_ERROR,
            "No TransactionApprovalMessageAttributes present. Make sure there is a TransactionApprovalParameterStep configured in the flow."
         );
         return Map.of();
      } else {
         return Map.copyOf(this.messageAttributes.get().getAttributes());
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   public TransactionApprovalParametersValueMapProvider() {
   }
}
