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

import com.airlock.iam.base.api.domain.model.event.DomainEvent;
import com.airlock.iam.base.api.domain.model.event.DomainEventSubscriber;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.domain.service.email.EmailEventSubscriber;
import com.airlock.iam.login.application.configuration.event.LoginappEmailEventSubscriberConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import lombok.NonNull;

@LogicForConfig(LoginappEmailEventSubscriberConfig.class)
public final class LoginappEmailEventSubscriber implements DomainEventSubscriber<DomainEvent> {
   private final Provider<EmailEventSubscriber> delegate;

   @Inject
   LoginappEmailEventSubscriber(@NonNull Provider<EmailEventSubscriber> delegate) {
      if (delegate == null) {
         throw new NullPointerException("delegate is marked non-null but is null");
      }

      this.delegate = delegate;
   }

   @Override
   public void handleEvent(DomainEvent event) {
      ((EmailEventSubscriber)this.delegate.get()).handleEvent(event);
   }

   @Override
   public Class<DomainEvent> forType() {
      return DomainEvent.class;
   }

   @Override
   public String toString() {
      return ((EmailEventSubscriber)this.delegate.get()).toString();
   }
}
