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.DeleteRoleTransformationConfig;
import jakarta.inject.Inject;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

@LogicForConfig(DeleteRoleTransformationConfig.class)
public final class DeleteRoleTransformation implements RoleTransformation {
   private final List<Pattern> deletePatterns;

   @Inject
   public DeleteRoleTransformation(List<Pattern> deletePatterns) {
      this.deletePatterns = deletePatterns;
   }

   @Override
   public Set<Role> apply(Set<Role> before) {
      return before.stream().filter(this::filterRole).collect(Collectors.toSet());
   }

   private boolean filterRole(Role role) {
      return this.deletePatterns.stream().noneMatch(pattern -> pattern.matcher(role.formatRole()).matches());
   }
}
