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.data.User;
import com.nyancraft.reportrts.event.TicketAssignEvent;
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 AssignTicket {
private static ReportRTS plugin = ReportRTS.getPlugin();
private static DataProvider data = plugin.getDataProvider();
/**
* Initial handling of the AssignTicket 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 < 3) return false;
if(!RTSPermissions.canAssignTickets(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 assignee = args[2];
if(assignee == null) {
sender.sendMessage(Message.error("Your name or assignee is null! Try again."));
return true;
}
User user = data.getUnsafeUser(assignee);
if(user == null) {
sender.sendMessage(Message.errorUserNotExists(assignee));
return true;
}
long timestamp = System.currentTimeMillis() / 1000;
switch(data.setTicketStatus(ticketId, user.getUuid(),
user.getUsername(), 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 = sender.getServer().getPlayer(plugin.tickets.get(ticketId).getUUID());
if(player != null) {
player.sendMessage(Message.ticketAssignUser(assignee));
player.sendMessage(Message.ticketText(plugin.tickets.get(ticketId).getMessage()));
}
plugin.tickets.get(ticketId).setStatus(1);
plugin.tickets.get(ticketId).setStaffUuid(user.getUuid());
plugin.tickets.get(ticketId).setStaffTime(timestamp);
plugin.tickets.get(ticketId).setStaffName(assignee);
try {
BungeeCord.globalNotify(Message.ticketAssign(assignee, ticketId), ticketId, NotificationType.MODIFICATION);
} catch(IOException e) {
e.printStackTrace();
}
RTSFunctions.messageStaff(Message.ticketAssign(assignee, ticketId), false);
// Let other plugins know the request was assigned.
plugin.getServer().getPluginManager().callEvent(new TicketAssignEvent(plugin.tickets.get(ticketId), sender));
return true;
}
}