package com.airlock.iam.login.application.service.attribute;

import com.airlock.iam.base.api.domain.model.validation.ValidationResult;
import com.airlock.iam.flow.api.domain.model.session.FlowSession;
import com.airlock.iam.flow.domain.model.flow.FlowProvider;
import com.airlock.iam.flow.domain.service.FlowRequestAttributeExtractor;
import com.airlock.iam.login.domain.model.attribute.AdditionalPasswordCheckAttributes;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Map;

public final class RequestAttributeService {
   private final Provider<FlowRequestAttributeExtractor> extractor;
   private final Provider<FlowSession> flowSession;
   private final Provider<FlowProvider> flowProvider;

   @Inject
   public RequestAttributeService(Provider<FlowRequestAttributeExtractor> extractor, Provider<FlowSession> flowSession, Provider<FlowProvider> flowProvider) {
      this.extractor = extractor;
      this.flowSession = flowSession;
      this.flowProvider = flowProvider;
   }

   public ValidationResult validate(Map<String, String> attributes) {
      return ((FlowRequestAttributeExtractor)this.extractor.get()).validateAttributes(attributes);
   }

   public void consume(Map<String, String> attributes) {
      Map<String, String> values = ((FlowRequestAttributeExtractor)this.extractor.get()).extractValidAttributes(attributes);
      if (!values.isEmpty()) {
         ((FlowProvider)this.flowProvider.get()).getCurrentOrStartNew();
         ((FlowSession)this.flowSession.get())
            .flowAttributes()
            .putOrMergeAttribute(AdditionalPasswordCheckAttributes.additionalPasswordCheckAttributes(values));
      }
   }
}
