package entity.mx;
import entity.system.Users;
import entity.system.UsersTools;
import op.OPDE;
import op.system.EMailSystem;
import op.tools.SYSTools;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.*;
import java.text.DateFormat;
import java.util.ArrayList;
/**
* Created by tloehr on 02.08.16.
*/
public class MXmsgTools {
public static ArrayList<MXmsg> getAllFor(Users recipient) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT rcp.msg FROM MXrecipient rcp WHERE rcp.recipient = :recipient AND rcp.msg.draft = FALSE AND rcp.trashed = FALSE ORDER BY rcp.msg.pit DESC");
query.setParameter("recipient", recipient);
ArrayList<MXmsg> result = null;
try {
result = new ArrayList<MXmsg>(query.getResultList());
} catch (Exception e) {
OPDE.fatal(e);
}
if (result == null) {
result = new ArrayList<MXmsg>();
}
return result;
}
public static ArrayList<MXmsg> getAllUnreadFor(Users recipient) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT rcp.msg FROM MXrecipient rcp WHERE rcp.recipient = :recipient AND rcp.msg.draft = FALSE AND rcp.trashed = FALSE and rcp.unread = TRUE ORDER BY rcp.msg.pit DESC");
query.setParameter("recipient", recipient);
ArrayList<MXmsg> result = null;
try {
result = new ArrayList<MXmsg>(query.getResultList());
} catch (Exception e) {
OPDE.fatal(e);
}
if (result == null) {
result = new ArrayList<MXmsg>();
}
return result;
}
public static ArrayList<MXmsg> getSentFor(Users sender) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT msg FROM MXmsg msg WHERE msg.sender = :sender AND msg.draft = FALSE ORDER BY msg.pit DESC");
query.setParameter("sender", sender);
ArrayList<MXmsg> result = null;
try {
result = new ArrayList<MXmsg>(query.getResultList());
} catch (Exception e) {
OPDE.fatal(e);
}
if (result == null) {
result = new ArrayList<MXmsg>();
}
return result;
}
public static ArrayList<MXmsg> getDrafts(Users sender) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT msg FROM MXmsg msg WHERE msg.sender = :sender AND msg.draft = TRUE ORDER BY msg.pit DESC");
query.setParameter("sender", sender);
ArrayList<MXmsg> result = null;
try {
result = new ArrayList<MXmsg>(query.getResultList());
} catch (Exception e) {
OPDE.fatal(e);
}
if (result == null) {
result = new ArrayList<MXmsg>();
}
return result;
}
public static ArrayList<MXmsg> getTrashed(Users recipient) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT rcp.msg FROM MXrecipient rcp WHERE rcp.recipient = :recipient AND rcp.trashed = TRUE ORDER BY rcp.msg.pit DESC");
query.setParameter("recipient", recipient);
ArrayList<MXmsg> result = null;
try {
result = new ArrayList<MXmsg>(query.getResultList());
} catch (Exception e) {
OPDE.fatal(e);
}
if (result == null) {
result = new ArrayList<MXmsg>();
}
return result;
}
public static boolean hasUnread(Users recipient) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT rcp.msg FROM MXrecipient rcp WHERE rcp.recipient = :recipient and rcp.unread = TRUE and rcp.msg.draft = FALSE ");
query.setMaxResults(1);
query.setParameter("recipient", recipient);
ArrayList<MXmsg> result = null;
try {
result = new ArrayList<>(query.getResultList());
} catch (Exception e) {
OPDE.fatal(e);
}
return result.size() > 0;
}
public static boolean isUnread(MXmsg msg) {
boolean unread = true;
for (MXrecipient mXrecipient : msg.getRecipients()) {
if (!mXrecipient.isUnread()) {
unread = false;
break;
}
}
return unread;
}
public static void sendNotificationsFor(MXmsg msg){
if (!EMailSystem.isMailsystemActive()) return;
for (MXrecipient mXrecipient : msg.getRecipients()){
if (mXrecipient.getRecipient().getMailConfirmed() == UsersTools.MAIL_NOTIFICATIONS_ENABLED){
SwingWorker w = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
EMailSystem.sendMail(SYSTools.xx("mx.mail.notification.subject"), SYSTools.xx("mx.mail.notification.body", mXrecipient.getRecipient().getVorname()) + getMsgAsText(msg), mXrecipient.getRecipient());
return null;
}
};
w.execute();
}
}
}
/**
* compact string representation of the msg
* @param msg
* @return
*/
public static String getMsgAsText(MXmsg msg){
String text = SYSTools.xx("mx.sender") + ": "+ UsersTools.getFullnameWithID(msg.getSender()) + ", " + DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(msg.getPit()) + "<br/>";
text += "<br/>";
text += SYSTools.xx("mx.col_subject")+ ": " + SYSTools.catchNull(msg.getSubject(), "mx.no.subject");
text += "<br/><br/>";
text += msg.getText();
return text;
}
// public static boolean isUnread(MXmsg mXmsg, Users user){
// MXrecipient mXrecipient = MXrecipientTools.findMXrecipient(mXmsg, user);
// return mXrecipient.getReceived().compareTo(SYSConst.DATE_UNTIL_FURTHER_NOTICE) == 0;
// }
}