package tv.mineinthebox.essentials.commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.enums.PermissionKey;
import tv.mineinthebox.essentials.events.customevents.ModreqDoneEvent;
import tv.mineinthebox.essentials.instances.Modreq;
import tv.mineinthebox.essentials.interfaces.CommandTemplate;
import tv.mineinthebox.essentials.interfaces.XOfflinePlayer;
import tv.mineinthebox.essentials.interfaces.XPlayer;
public class CmdDone extends CommandTemplate {
private final xEssentials pl;
public CmdDone(xEssentials pl, Command cmd, CommandSender sender) {
super(pl, cmd, sender);
this.pl = pl;
}
private List<String> getPlayerByName(String p) {
List<String> s = new ArrayList<String>();
for(XOfflinePlayer name : pl.getManagers().getPlayerManager().getOfflinePlayers()) {
if(name.getName().toUpperCase().startsWith(p.toUpperCase())) {
s.add(name.getName());
}
}
return s;
}
private List<String> getIdsFromModreq(XOfflinePlayer off, String input) {
List<String> list = new ArrayList<String>();
for(Modreq mod : off.getModreqs()) {
String id = ""+mod.getId();
if(id.startsWith(input)) {
list.add(""+mod.getId());
}
}
return list;
}
public List<String> onTabComplete(CommandSender sender, Command cmd, String[] args) {
if(cmd.getName().equalsIgnoreCase("done")) {
if(sender.hasPermission(PermissionKey.CMD_DONE.getPermission())) {
if(args.length == 1) {
return getPlayerByName(args[0]);
}else if(args.length == 2) {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]);
return getIdsFromModreq(off, args[1]);
}
}
}
return null;
}
public boolean execute(CommandSender sender, Command cmd, String[] args) {
if(cmd.getName().equalsIgnoreCase("done")) {
if(args.length == 0) {
if(sender.hasPermission(PermissionKey.CMD_DONE.getPermission())) {
sender.sendMessage(ChatColor.GOLD + ".oO___[done modreq]____Oo.");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/done player <id> <message>");
} else {
getWarning(WarningType.NO_PERMISSION);
}
} else if(args.length == 1) {
if(sender.hasPermission(PermissionKey.CMD_DONE.getPermission())) {
if(args[0].equalsIgnoreCase("help")) {
sender.sendMessage(ChatColor.GOLD + ".oO___[done modreq]____Oo.");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/done player <id> <message>");
}
} else {
getWarning(WarningType.NO_PERMISSION);
}
} else if(args.length == 2) {
if(sender.hasPermission(PermissionKey.CMD_DONE.getPermission())) {
if(pl.getManagers().getPlayerManager().isOnline(args[0])) {
XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(args[0]);
if(xp.hasModreqsOpen()) {
try {
int id = Integer.parseInt(args[1]);
if(xp.isValidModreqId(id)) {
Modreq mod = xp.getModreq(id);
int idNumber = mod.getId();
String title;
if(mod.getMessage().length() > 15) {
title = mod.getMessage().substring(0, (mod.getMessage().length()/2))+"...";
} else {
title = mod.getMessage();
}
String author = mod.getPlayersName();
Date date = mod.getDate();
if(sender instanceof Player) {
Player p = (Player) sender;
Bukkit.getPluginManager().callEvent(new ModreqDoneEvent(xp.getBukkitPlayer(), title, "comment not defined", author, id, date, p));
}
xp.removeModreq(id);
sendMessageTo(xp.getBukkitPlayer(), "staff member " + sender.getName() + " has closed your modreq.");
sendMessageTo(xp.getBukkitPlayer(), "id: " + idNumber);
sendMessageTo(xp.getBukkitPlayer(), "message: " + title);
sendMessageTo(xp.getBukkitPlayer(), "comment: " + "comment not defined");
for(Player a : Bukkit.getOnlinePlayers()) {
if(a.hasPermission(PermissionKey.IS_ADMIN.getPermission())) {
sendMessageTo(a, "staff member " + sender.getName() + " has closed " + xp.getName() + " his modreq.");
sendMessageTo(a, "id: " + idNumber);
sendMessageTo(a, "message: " + title);
sendMessageTo(a, "comment: " + "comment not defined");
}
}
} else {
sendMessage("invalid modreq id!");
}
} catch(NumberFormatException e) {
sendMessage("second argument needs to be a number!");
}
} else {
sendMessage("this player has no modreqs open!");
}
} else {
try {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]);
if(off.hasModreqsOpen()) {
try {
int id = Integer.parseInt(args[1]);
if(off.isValidModreqId(id)) {
Modreq mod = off.getModreq(id);
int idNumber = mod.getId();
String title;
if(mod.getMessage().length() > 15) {
title = mod.getMessage().substring(0, (mod.getMessage().length()/2))+"...";
} else {
title = mod.getMessage();
}
off.removeModreq(id);
//serialize modreq comma is the separator
//TODO: add compatabillity for XPlayer where an sendMessage template gets added.
String s = "staff member " + sender.getName() + " has closed your modreq.,"+ChatColor.GREEN + "[Modreq]" + ChatColor.GRAY + "id: " + ChatColor.GREEN + idNumber + ","+ChatColor.GREEN + "[Modreq]" + ChatColor.GRAY + "message: " + ChatColor.GREEN + title+","+ChatColor.GREEN + "[Modreq]" + ChatColor.GRAY + "comment: " + ChatColor.GREEN + "comment not defined".replace('\u00A7', '&');
off.setModreqDoneMessage(s);
for(Player a : Bukkit.getOnlinePlayers()) {
if(a.hasPermission(PermissionKey.IS_ADMIN.getPermission())) {
sendMessageTo(a.getPlayer(), "staff member " + sender.getName() + " has closed offline player " + off.getName() + " his modreq.");
sendMessageTo(a.getPlayer(), "id: " + idNumber);
sendMessageTo(a.getPlayer(), "message: " + title);
sendMessageTo(a.getPlayer(), "comment: comment not defined");
}
}
} else {
sendMessage("invalid modreq id!");
}
} catch(NumberFormatException e) {
sendMessage("second argument needs to be a number!");
}
} else {
sendMessage("this player has no modreqs open!");
}
} catch(NullPointerException e) {
getWarning(WarningType.NEVER_PLAYED_BEFORE);
}
}
} else {
getWarning(WarningType.NO_PERMISSION);
}
} else {
if(sender.hasPermission(PermissionKey.CMD_DONE.getPermission())) {
if(pl.getManagers().getPlayerManager().isOnline(args[0])) {
XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(args[0]);
try {
int id = Integer.parseInt(args[1]);
if(xp.isValidModreqId(id)) {
Modreq mod = xp.getModreq(id);
int idNumber = mod.getId();
String title;
String comment = Arrays.toString(args).replace("[", "").replace(args[0]+",", "").replace(args[1]+",", "").replace(",", "").replace("]", "").substring(2);
if(mod.getMessage().length() > 15) {
title = mod.getMessage().substring(0, (mod.getMessage().length()/2))+"...";
} else {
title = mod.getMessage();
}
String author = mod.getPlayersName();
Date date = mod.getDate();
if(sender instanceof Player) {
Player p = (Player) sender;
Bukkit.getPluginManager().callEvent(new ModreqDoneEvent(xp.getBukkitPlayer(), title, comment, author, id, date, p));
}
xp.removeModreq(id);
sendMessageTo(xp.getBukkitPlayer(), "staff member " + sender.getName() + " has closed your modreq.");
sendMessageTo(xp.getBukkitPlayer(), "id: " + idNumber);
sendMessageTo(xp.getBukkitPlayer(), "message: " + title);
sendMessageTo(xp.getBukkitPlayer(), "comment: " + comment);
for(Player a : Bukkit.getOnlinePlayers()) {
if(a.hasPermission(PermissionKey.IS_ADMIN.getPermission())) {
sendMessageTo(a.getPlayer(), "staff member " + sender.getName() + " has closed " + xp.getName() + " his modreq.");
sendMessageTo(a.getPlayer(), "id: " + idNumber);
sendMessageTo(a.getPlayer(), "message: " + title);
sendMessageTo(a.getPlayer(), "comment: " + comment);
}
}
} else {
sendMessage("invalid modreq id!");
}
} catch(NumberFormatException e) {
sendMessage("second argument needs to be a number!");
}
} else {
try {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]);
try {
int id = Integer.parseInt(args[1]);
if(off.isValidModreqId(id)) {
Modreq mod = off.getModreq(id);
int idNumber = mod.getId();
String comment = Arrays.toString(args).replace("[", "").replace(args[0]+",", "").replace(args[1]+",", "").replace(",", "").replace("]", "").substring(2);
String title;
if(mod.getMessage().length() > 15) {
title = mod.getMessage().substring(0, (mod.getMessage().length()/2))+"...";
} else {
title = mod.getMessage();
}
off.removeModreq(idNumber);
String s = ("staff member " + sender.getName() + " has closed your modreq.,"+ChatColor.GREEN + "[Modreq]" + ChatColor.GRAY + "id: " + ChatColor.GREEN + idNumber + ","+ChatColor.GREEN + "[Modreq]" + ChatColor.GRAY + "message: " + ChatColor.GREEN + title+","+ChatColor.GREEN + "[Modreq]" + ChatColor.GRAY + "comment: " + comment).replace('\u00A7', '&');
off.setModreqDoneMessage(s);
for(Player a : Bukkit.getOnlinePlayers()) {
if(a.hasPermission(PermissionKey.IS_ADMIN.getPermission())) {
sendMessageTo(a.getPlayer(), "staff member " + sender.getName() + " has closed offline player " + off.getName() + " his modreq.");
sendMessageTo(a.getPlayer(), "id: " + idNumber);
sendMessageTo(a.getPlayer(), "message: " + title);
sendMessageTo(a.getPlayer(), "comment: " + comment);
}
}
} else {
sendMessage("invalid modreq id!");
}
} catch(NumberFormatException e) {
sendMessage("second argument needs to be a number!");
}
} catch(NullPointerException e) {
getWarning(WarningType.NEVER_PLAYED_BEFORE);
}
}
} else {
getWarning(WarningType.NO_PERMISSION);
}
}
}
return false;
}
}