package com.nyancraft.reportrts.command.sub;
import com.nyancraft.reportrts.RTSFunctions;
import com.nyancraft.reportrts.RTSPermissions;
import com.nyancraft.reportrts.ReportRTS;
import com.nyancraft.reportrts.data.NotificationType;
import com.nyancraft.reportrts.event.TicketClaimEvent;
import com.nyancraft.reportrts.persistence.DataProvider;
import com.nyancraft.reportrts.util.BungeeCord;
import com.nyancraft.reportrts.util.Message;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.io.IOException;
public class ClaimTicket {
private static ReportRTS plugin = ReportRTS.getPlugin();
private static DataProvider data = plugin.getDataProvider();
/**
* Initial handling of the Claim sub-command.
* @param sender player that sent the command
* @param args arguments
* @return true if command handled correctly
*/
public static boolean handleCommand(CommandSender sender, String[] args) {
if(args.length < 2) return false;
if(!RTSPermissions.canClaimTicket(sender)) return true;
if(!RTSFunctions.isNumber(args[1])) {
sender.sendMessage(Message.errorTicketNaN(args[1]));
return true;
}
int ticketId = Integer.parseInt(args[1]);
// The ticket the user is trying to claim is not open.
if(!plugin.tickets.containsKey(ticketId)){
sender.sendMessage(Message.ticketNotOpen(ticketId));
return true;
}
String name = sender.getName();
if(name == null) {
sender.sendMessage(Message.error("Name is null! Try again."));
return true;
}
long timestamp = System.currentTimeMillis() / 1000;
switch(data.setTicketStatus(ticketId, (sender instanceof Player) ? ((Player) sender).getUniqueId() : data.getConsole().getUuid(),
sender.getName(), 1, false, System.currentTimeMillis() / 1000)) {
case -3:
// Ticket does not exist.
sender.sendMessage(Message.ticketNotExists(ticketId));
return true;
case -2:
// Ticket status incompatibilities.
sender.sendMessage(Message.errorTicketStatus());
return true;
case -1:
// Username is invalid or does not exist.
sender.sendMessage(Message.error("Your user does not exist in the user table and was not successfully created."));
return true;
case 0:
// No row was affected...
sender.sendMessage(Message.error("No entries were affected. Check console for errors."));
return true;
case 1:
// Everything went swimmingly if case is 1.
break;
default:
sender.sendMessage(Message.error("A invalid result code has occurred."));
return true;
}
Player player = plugin.getServer().getPlayer(plugin.tickets.get(ticketId).getUUID());
if(player != null) {
player.sendMessage(Message.ticketClaimUser(name));
player.sendMessage(Message.ticketText(plugin.tickets.get(ticketId).getMessage()));
}
plugin.tickets.get(ticketId).setStatus(1);
// Workaround for CONSOLE.
plugin.tickets.get(ticketId).setStaffUuid((!(sender instanceof Player) ? data.getConsole().getUuid() : ((Player) sender).getUniqueId()));
plugin.tickets.get(ticketId).setStaffTime(timestamp);
plugin.tickets.get(ticketId).setStaffName(name);
try {
BungeeCord.globalNotify(Message.ticketClaim(name, args[1]), ticketId, NotificationType.MODIFICATION);
} catch(IOException e) {
e.printStackTrace();
}
RTSFunctions.messageStaff(Message.ticketClaim(name, args[1]), false);
// Let other plugins know the request was claimed
plugin.getServer().getPluginManager().callEvent(new TicketClaimEvent(plugin.tickets.get(ticketId)));
return true;
}
}