package com.airlock.iam.login.domain.model.event;

import com.airlock.iam.base.api.domain.model.email.EmailAddress;
import com.airlock.iam.base.api.domain.model.event.DomainEvent;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import com.airlock.iam.common.domain.service.event.EventEmailRecipientProvider;
import com.airlock.iam.login.application.configuration.event.StringProviderRecipientConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

@LogicForConfig(StringProviderRecipientConfig.class)
public final class StringProviderRecipientProvider implements EventEmailRecipientProvider {
   private final Provider<ValueProvider<String>> valueProvider;

   @Inject
   StringProviderRecipientProvider(Provider<ValueProvider<String>> valueProvider) {
      this.valueProvider = valueProvider;
   }

   @Override
   public Optional<EmailAddress> provideRecipientAddress(DomainEvent event) {
      return Optional.ofNullable((String)((ValueProvider)this.valueProvider.get()).getValue()).flatMap(EmailAddress::emailAddress);
   }
}
