package com.airlock.iam.common.domain.model.role;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.common.api.domain.model.role.RoleTransformation;
import com.airlock.iam.common.application.configuration.role.AddRoleTransformationConfig;
import jakarta.inject.Inject;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@LogicForConfig(AddRoleTransformationConfig.class)
public final class AddRoleTransformation implements RoleTransformation {
   private final Set<Role> newRoles;

   @Inject
   public AddRoleTransformation(Set<Role> newRoles) {
      this.newRoles = newRoles;
   }

   @Override
   public Set<Role> apply(Set<Role> before) {
      return Stream.concat(before.stream(), this.newRoles.stream()).collect(Collectors.toSet());
   }
}
