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.event.UserEvent;
import com.airlock.iam.common.api.domain.model.phonenumber.PhoneNumber;
import com.airlock.iam.common.application.configuration.sms.AllPhoneNumbersProviderConfig;
import com.airlock.iam.common.domain.model.token.mtan.CommonMtanTokenRepository;
import com.airlock.iam.common.domain.service.event.PhoneNumbersProvider;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Collection;
import java.util.Collections;

@LogicForConfig(AllPhoneNumbersProviderConfig.class)
public final class AllPhoneNumbersProviderImpl implements PhoneNumbersProvider {
   private final Provider<CommonMtanTokenRepository> repository;

   @Inject
   public AllPhoneNumbersProviderImpl(Provider<CommonMtanTokenRepository> repository) {
      this.repository = repository;
   }

   @Override
   public Collection<PhoneNumber> phoneNumbers(DomainEvent event) {
      return event instanceof UserEvent userEvent
         ? ((CommonMtanTokenRepository)this.repository.get())
            .getMtanTokens(userEvent.userId())
            .stream()
            .map(item -> PhoneNumber.phoneNumber(item.getMobilePhoneNumber()))
            .toList()
         : Collections.emptyList();
   }
}
