package com.airlock.iam.admin.application.configuration.users;

import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;

@Plugin(
   description = "Strategy to select role specific configurations based on the admin's roles.<p>Selects a configuration if the admin has any of the roles required by the configuration.</p>",
   displayName = "Any Required Role Matches"
)
public class AnyRequiredRoleMatcher implements RolebasedConfigSelectionStrategy {
   @Override
   public boolean isConfigApplicapleForAdminWithRoles(AdminRoleSpecificSetting config, Set<Role> adminRoles) {
      return CollectionUtils.containsAny(config.getRequiredAdminRoles(), adminRoles);
   }

   @SuppressFBWarnings(justification = "generated code")
   public static AnyRequiredRoleMatcher.AnyRequiredRoleMatcherBuilder builder() {
      return new AnyRequiredRoleMatcher.AnyRequiredRoleMatcherBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class AnyRequiredRoleMatcherBuilder {
      @SuppressFBWarnings(justification = "generated code")
      AnyRequiredRoleMatcherBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnyRequiredRoleMatcher build() {
         return new AnyRequiredRoleMatcher();
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "AnyRequiredRoleMatcher.AnyRequiredRoleMatcherBuilder()";
      }
   }
}
