package com.airlock.iam.admin.domain.model.administrator;

import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.common.domain.model.role.RoleCombination;
import java.util.Set;

public final class PeparRoles {
   private final RoleCombination pepar;

   private PeparRoles(String... roles) {
      this.pepar = RoleCombination.roleCombination(roles);
   }

   public static PeparRoles of(Set<String> peparRoles) {
      return new PeparRoles(peparRoles.toArray(String[]::new));
   }

   public static PeparRoles noRestrictions() {
      return new PeparRoles();
   }

   public boolean hasPermissionFor(Set<Role> currentAdministratorRoles, Administrator otherAdministrator) {
      if (!this.pepar.hasRoles()) {
         return true;
      } else {
         return !this.pepar.containsAtLeastOne(otherAdministrator.roles().getAll()) ? true : this.pepar.containsAtLeastOne(currentAdministratorRoles);
      }
   }

   public boolean hasAnyRoleOf(Set<Role> roles) {
      return this.pepar.containsAtLeastOne(roles);
   }
}
