package org.freecode.irc.votebot.modules.common;
import org.freecode.irc.Notice;
import org.freecode.irc.Privmsg;
import org.freecode.irc.votebot.api.CommandModule;
import org.freecode.irc.votebot.dao.PollDAO;
import org.freecode.irc.votebot.dao.VoteDAO;
import org.freecode.irc.votebot.entity.Poll;
import org.freecode.irc.votebot.entity.Vote;
import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Locale;
import java.util.TimeZone;
public class PollsModule extends CommandModule {
private PollDAO pollDAO;
private VoteDAO voteDAO;
@Override
public void processMessage(Privmsg privmsg) {
try {
Poll[] polls = getRelevantPolls(privmsg);
String input = privmsg.getMessage();
String[] params = input.split(" ");
if (polls.length == 0) {
String message;
switch (params.length) {
case 1:
message = "No active polls to view!";
break;
case 2:
message = "No polls to vote in!";
break;
default:
message = "No results!";
break;
}
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), message, privmsg.getIrcConnection()));
return;
}
String title;
switch (params.length) {
case 1:
title = "List of polls:";
break;
case 2:
title = "List of polls not voted in:";
break;
default:
title = "List of polls containing \"" + input.substring(input.indexOf("search") + 7) + "\":";
break;
}
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), title, privmsg.getIrcConnection()));
if (params.length <= 2) {
for (Poll poll : polls) {
Vote[] votes = voteDAO.getVotesOnPoll(poll.getId());
int yes = 0, no = 0, abstain = 0;
for (Vote vote : votes) {
int i = vote.getAnswerIndex();
if (i == 0) {
yes++;
} else if (i == 1) {
no++;
} else if (i == 2) {
abstain++;
}
}
System.out.println(poll.getExpiry());
String msg = "Poll #" + poll.getId() + ": " + poll.getQuestion() +
" Ends: " + getDateFormatter().format(new Date(poll.getExpiry())) + " Created by: " + poll.getCreator() +
" Yes: " + yes + " No: " + no + " Abstain: " + abstain;
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), msg, privmsg.getIrcConnection()));
}
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "End list of polls.", privmsg.getIrcConnection()));
} else {
StringBuilder results = new StringBuilder();
for (int i = 0; i < polls.length; i++) {
results.append("#");
results.append(polls[i].getId());
if(i != polls.length - 1){
results.append(", ");
}
}
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), results.toString(), privmsg.getIrcConnection()));
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "End results of search.", privmsg.getIrcConnection()));
}
} catch (Exception e) {
privmsg.send(e.getClass().getName() + " " + e.getMessage());
privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), Arrays.toString(e.getStackTrace()), privmsg.getIrcConnection()));
}
}
private Poll[] getRelevantPolls(Privmsg privmsg) throws SQLException {
String message = privmsg.getMessage();
String[] params = message.split(" ");
switch (params.length) {
case 1:
return pollDAO.getOpenPolls();
case 2:
return voteDAO.getPollsNotVotedIn(pollDAO.getOpenPolls(), privmsg.getNick());
default:
return pollDAO.getPollsContaining(message.substring(message.indexOf("search") + 7));
}
}
@Override
public String getName() {
return "polls";
}
@Override
protected String getParameterRegex() {
return "(notvoted|(search\\s.+))?";
}
private DateFormat getDateFormatter() {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.UK);
dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
return dateFormat;
}
public void setPollDAO(PollDAO pollDAO) {
this.pollDAO = pollDAO;
}
public void setVoteDAO(VoteDAO voteDAO) {
this.voteDAO = voteDAO;
}
}