package handling.channel.handler;
import client.MapleClient;
import handling.world.WorldGuildService;
import handling.world.guild.MapleBBSThread;
import java.util.List;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.packet.GuildPacket;
public class BBSHandler {
private static String correctLength(String in, int maxSize) {
if (in.length() > maxSize) {
return in.substring(0, maxSize);
}
return in;
}
public static void BBSOperation(SeekableLittleEndianAccessor slea, MapleClient c) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
int localthreadid = 0;
byte action = slea.readByte();
String text;
switch (action) {
case 0:
boolean bEdit = slea.readByte() > 0;
if (bEdit) {
localthreadid = slea.readInt();
}
boolean bNotice = slea.readByte() > 0;
String title = correctLength(slea.readMapleAsciiString(), 25);
text = correctLength(slea.readMapleAsciiString(), 600);
int icon = slea.readInt();
if ((icon >= 100) && (icon <= 106)) {
if (!c.getPlayer().haveItem(5290000 + icon - 100, 1, false, true)) {
return;
}
} else if ((icon < 0) || (icon > 2)) {
return;
}
if (!bEdit) {
newBBSThread(c, title, text, icon, bNotice);
} else {
editBBSThread(c, title, text, icon, localthreadid);
}
break;
case 1:
localthreadid = slea.readInt();
deleteBBSThread(c, localthreadid);
break;
case 2:
int start = slea.readInt();
listBBSThreads(c, start * 10);
break;
case 3:
localthreadid = slea.readInt();
displayThread(c, localthreadid);
break;
case 4:
localthreadid = slea.readInt();
text = correctLength(slea.readMapleAsciiString(), 25);
newBBSReply(c, localthreadid, text);
break;
case 5:
localthreadid = slea.readInt();
int replyid = slea.readInt();
deleteBBSReply(c, localthreadid, replyid);
}
}
private static void listBBSThreads(MapleClient c, int start) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
c.getSession().write(GuildPacket.BBSThreadList(WorldGuildService.getInstance().getBBS(c.getPlayer().getGuildId()), start));
}
private static void newBBSReply(MapleClient c, int localthreadid, String text) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
WorldGuildService.getInstance().addBBSReply(c.getPlayer().getGuildId(), localthreadid, text, c.getPlayer().getId());
displayThread(c, localthreadid);
}
private static void editBBSThread(MapleClient c, String title, String text, int icon, int localthreadid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
WorldGuildService.getInstance().editBBSThread(c.getPlayer().getGuildId(), localthreadid, title, text, icon, c.getPlayer().getId(), c.getPlayer().getGuildRank());
displayThread(c, localthreadid);
}
private static void newBBSThread(MapleClient c, String title, String text, int icon, boolean bNotice) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
displayThread(c, WorldGuildService.getInstance().addBBSThread(c.getPlayer().getGuildId(), title, text, icon, bNotice, c.getPlayer().getId()));
listBBSThreads(c, 0);
}
private static void deleteBBSThread(MapleClient c, int localthreadid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
WorldGuildService.getInstance().deleteBBSThread(c.getPlayer().getGuildId(), localthreadid, c.getPlayer().getId(), c.getPlayer().getGuildRank());
}
private static void deleteBBSReply(MapleClient c, int localthreadid, int replyid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
WorldGuildService.getInstance().deleteBBSReply(c.getPlayer().getGuildId(), localthreadid, replyid, c.getPlayer().getId(), c.getPlayer().getGuildRank());
displayThread(c, localthreadid);
}
private static void displayThread(MapleClient c, int localthreadid) {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
List<MapleBBSThread> bbsList = WorldGuildService.getInstance().getBBS(c.getPlayer().getGuildId());
if (bbsList != null) {
for (MapleBBSThread t : bbsList) {
if ((t != null) && (t.localthreadID == localthreadid)) {
c.getSession().write(GuildPacket.showThread(t));
}
}
}
}
}