package won.bot.framework.eventbot.action.impl.telegram.util;
import org.apache.commons.lang.StringUtils;
import org.apache.jena.query.Dataset;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.replykeyboard.InlineKeyboardMarkup;
import org.telegram.telegrambots.api.objects.replykeyboard.buttons.InlineKeyboardButton;
import won.bot.framework.eventbot.EventListenerContext;
import won.protocol.message.WonMessage;
import won.protocol.model.NeedContentPropertyType;
import won.protocol.util.DefaultNeedModelWrapper;
import won.protocol.util.WonRdfUtils;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
/**
* Created by fsuda on 16.12.2016.
*/
public class TelegramMessageGenerator {
private static final Logger logger = LoggerFactory.getLogger(TelegramMessageGenerator.class);
private EventListenerContext eventListenerContext;
public SendMessage getHintMessage(Long chatId, URI remoteNeedUri, URI yourNeedUri) {
Dataset remoteNeedRDF = eventListenerContext.getLinkedDataSource().getDataForResource(remoteNeedUri);
DefaultNeedModelWrapper needModelWrapper = new DefaultNeedModelWrapper(remoteNeedRDF);
String title = needModelWrapper.getSomeTitleFromIsOrAll("en","de");
String description = needModelWrapper.getSomeDescription(NeedContentPropertyType.ALL,"en","de");
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
String text = "<b>We found a Match for you!\n\n</b><a href='"+remoteNeedUri+"'>"+title+"\n\n</a>";
if(description != null){
text = text+"<em>"+description+"</em>";
}
sendMessage.setText(text);
sendMessage.setReplyMarkup(getConnectionActionKeyboard("Request", "Close"));
sendMessage.enableHtml(true);
return sendMessage;
}
public SendMessage getConnectMessage(Long chatId, URI remoteNeedUri, URI yourNeedUri) {
Dataset remoteNeedRDF = eventListenerContext.getLinkedDataSource().getDataForResource(remoteNeedUri);
DefaultNeedModelWrapper needModelWrapper = new DefaultNeedModelWrapper(remoteNeedRDF);
String title = needModelWrapper.getSomeTitleFromIsOrAll("en","de");
String description = needModelWrapper.getSomeDescription(NeedContentPropertyType.ALL, "en","de");
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
String text = "<b>Someone wants to connect with you!\n\n</b><a href='"+remoteNeedUri+"'>"+title+"\n\n</a>";
if(description != null){
text = text+"<em>"+description+"</em>";
}
sendMessage.setText(text);
sendMessage.setReplyMarkup(getConnectionActionKeyboard("Accept", "Deny"));
sendMessage.enableHtml(true);
return sendMessage;
}
public SendMessage getConnectionTextMessage(Long chatId, URI remoteNeedUri, URI yourNeedUri, WonMessage message) {
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
sendMessage.setText("<a href='" + remoteNeedUri + "'>URI</a>: "+ extractTextMessageFromWonMessage(message));
sendMessage.enableHtml(true);
return sendMessage;
}
public SendMessage getCreatedNeedMessage(Long chatId, URI needURI) {
Dataset createdNeedRDF = eventListenerContext.getLinkedDataSource().getDataForResource(needURI);
DefaultNeedModelWrapper needModelWrapper = new DefaultNeedModelWrapper(createdNeedRDF);
String title = needModelWrapper.getSomeTitleFromIsOrAll("en","de");
String description = needModelWrapper.getSomeDescription(NeedContentPropertyType.ALL, "en","de");
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
String text = "<b>We created a Need for you!\n\n</b><a href='"+needURI+"'>"+title+"\n\n</a>";
if(description != null){
text = text+"<em>"+description+"</em>";
}
sendMessage.setText(text);
sendMessage.enableHtml(true);
return sendMessage;
}
public SendMessage getErrorMessage(Long chatId) {
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
sendMessage.setText("could not create need wrong syntax");
return sendMessage;
}
private static String extractTextMessageFromWonMessage(WonMessage wonMessage){
if (wonMessage == null) return null;
String message = WonRdfUtils.MessageUtils.getTextMessage(wonMessage);
return StringUtils.trim(message);
}
private InlineKeyboardMarkup getConnectionActionKeyboard(String acceptText, String denyText) {
InlineKeyboardMarkup connectionActionKeyboard = new InlineKeyboardMarkup();
List<List<InlineKeyboardButton>> rows = new ArrayList<>();
List<InlineKeyboardButton> row = new ArrayList<>();
InlineKeyboardButton denyButton = new InlineKeyboardButton();
denyButton.setText(denyText);
denyButton.setCallbackData("0");
InlineKeyboardButton acceptButton = new InlineKeyboardButton();
acceptButton.setText(acceptText);
acceptButton.setCallbackData("1");
row.add(acceptButton);
row.add(denyButton);
rows.add(row);
connectionActionKeyboard.setKeyboard(rows);
return connectionActionKeyboard;
}
public void setEventListenerContext(EventListenerContext eventListenerContext) {
this.eventListenerContext = eventListenerContext;
}
}