package util;
import gui.forms.GUIMain;
import irc.Subscriber;
import lib.pircbot.User;
import util.settings.Settings;
import java.util.ArrayList;
import java.util.Optional;
/**
* Created by Nick on 8/8/2015.
*/
public class Permissions {
public enum Permission implements Comparable<Permission> {
VIEWER(0), // Somebody in chat
SUBSCRIBER(1), // Somebody that is a subscriber
DONOR(2), // Somebody that has donated/cheered
MODERATOR(3), // Somebody that is a mod
BROADCASTER(4); // Somebody that is the broadcaster of the channel
public int permValue;
Permission(int perm) {
permValue = perm;
}
}
public static Permission asPermission(int perm) {
for (Permission p : Permission.values()) {
if (p.permValue == perm) {
return p;
}
}
return Permission.VIEWER;
}
/**
* Gets the permission of the user based on their status.
*
* @param u The user to check.
* @param channel The channel this is for.
* @return The permissions they have.
*/
public static ArrayList<Permission> getUserPermissions(User u, String channel) {
ArrayList<Permission> permissionList = new ArrayList<>();
permissionList.add(Permission.VIEWER);
if (Utils.isMainChannel(channel)) {
Optional<Subscriber> sub = Settings.subscriberManager.getSubscriber(u.getNick());
if (sub.isPresent() && !sub.get().isActive()) {
// Technically this is an EX_SUBSCRIBER but they are the same as a SUBSCRIBER, permission-wise
permissionList.add(Permission.SUBSCRIBER);
}
}
if (u.isSubscriber(channel)) {
permissionList.add(Permission.SUBSCRIBER);
}
if (u.isDonor()) {
if (u.getDonated() >= 2.50) {
permissionList.add(Permission.DONOR);
}
}
if (u.isOp(channel) || u.isAdmin() || u.isStaff() || u.isGlobalMod()) {
permissionList.add(Permission.MODERATOR);
}
if (GUIMain.viewer != null && Settings.accountManager.getUserAccount().getName().equalsIgnoreCase(u.getNick())) {
permissionList.add(Permission.BROADCASTER);
}
return permissionList;
}
public static boolean hasAtLeast(ArrayList<Permission> permission, int perm) {
return hasAtLeast(permission, asPermission(perm));
}
public static boolean hasAtLeast(ArrayList<Permission> permissions, Permission toCheck) {
for (Permission p : permissions) {
if (p.compareTo(toCheck) > -1) {
return true;
}
}
return false;
}
}