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

import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.base.domain.model.event.EventCreationData;
import com.airlock.iam.base.domain.model.event.EventPublisher;
import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.common.domain.model.event.UserRolesChangedEventFactory;
import com.airlock.iam.common.domain.model.event.UserRolesChangedImpl;
import jakarta.annotation.Nonnull;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Set;

public final class UserRolesChangedEventFactoryImpl implements UserRolesChangedEventFactory {
   private final Provider<EventCreationData> creationData;
   private final Provider<EventPublisher> eventPublisher;

   @Inject
   public UserRolesChangedEventFactoryImpl(@Nonnull Provider<EventCreationData> creationData, @Nonnull Provider<EventPublisher> eventPublisher) {
      this.creationData = creationData;
      this.eventPublisher = eventPublisher;
   }

   @Override
   public void publishUserRolesChangedEvent(UserId userId, Set<Role> oldRoles, Set<Role> newRoles) {
      ((EventPublisher)this.eventPublisher.get()).publish(new UserRolesChangedImpl((EventCreationData)this.creationData.get(), userId, oldRoles, newRoles));
   }
}
