package com.airlock.iam.common.infrastructure.event;

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.phonenumber.PhoneNumber;
import com.airlock.iam.common.api.domain.model.valueprovider.ValueProvider;
import com.airlock.iam.common.application.configuration.sms.StringValuePhoneNumbersProviderConfig;
import com.airlock.iam.common.domain.service.event.PhoneNumbersProvider;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang3.StringUtils;

@LogicForConfig(StringValuePhoneNumbersProviderConfig.class)
public final class StringValuePhoneNumbersProvider implements PhoneNumbersProvider {
   private final Provider<List<ValueProvider<String>>> valueProviders;

   @Inject
   public StringValuePhoneNumbersProvider(Provider<List<ValueProvider<String>>> valueProviders) {
      this.valueProviders = valueProviders;
   }

   @Override
   public Collection<PhoneNumber> phoneNumbers(DomainEvent event) {
      return ((List)this.valueProviders.get()).stream().map(ValueProvider::getValue).filter(StringUtils::isNotBlank).map(PhoneNumber::phoneNumber).toList();
   }
}
