package com.airlock.iam.flow.shared.domain.model.valueprovider;

import com.airlock.iam.base.api.domain.model.email.EmailAddress;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import com.airlock.iam.flow.shared.api.domain.service.FlowAttributeService;
import com.airlock.iam.flow.shared.application.configuration.valueprovider.ChangedEmailProviderConfig;
import com.airlock.iam.flow.shared.domain.model.step.email.EmailChangeDescription;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(ChangedEmailProviderConfig.class)
public final class ChangedEmailProvider implements ValueProvider<String> {
   private final Provider<FlowAttributeService> attributes;

   @Inject
   public ChangedEmailProvider(Provider<FlowAttributeService> attributes) {
      this.attributes = attributes;
   }

   public String getValue() {
      return ((FlowAttributeService)this.attributes.get())
         .findAttribute(EmailChangeDescription.class)
         .flatMap(EmailChangeDescription::getEmailAddress)
         .map(EmailAddress::value)
         .orElse(null);
   }
}
