package com.arthurbergmz.assistant.intelligence;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import com.arthurbergmz.assistant.Assistant;
import com.arthurbergmz.assistant.Config;
import com.arthurbergmz.assistant.intelligence.grammar.EnUSGrammar;
import com.arthurbergmz.assistant.intelligence.grammar.PtBRGrammar;
import com.arthurbergmz.assistant.intelligence.memorybank.Memory;
import com.arthurbergmz.assistant.intelligence.memorybank.Thought;
import com.arthurbergmz.assistant.language.Language;
import com.arthurbergmz.assistant.utils.StringUtils;
public class LearnThought implements Thought {
@Override
public String[] getRelatedSentences(){
return StringUtils.EMPTY_ARRAY;
}
@Override
public boolean execute(String label, Assistant a){
String str = label.toLowerCase();
String[] grammar = (Config.LANGUAGE.equals(Language.PORTUGUESE_BRAZIL) ? PtBRGrammar.LEARNING.getGrammar() : EnUSGrammar.LEARNING.getGrammar());
for(int i = 0, j = grammar.length; i < j; i++) str = str.replace(grammar[i].toLowerCase(), "");
str = str.trim();
for(Memory memory : a.getMemoryBank()){
if(StringUtils.checkSimilarity(str, memory.key()) <= 1D){
a.say("Eu j� sei o que � " + str + ".");
return true;
}
}
System.out.println(" -> \"" + str + "\"");
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this);
if(t == null){
a.say("Copie a defini��o de " + str + " para que eu possa armazen�-la.");
}else if(!t.isDataFlavorSupported(DataFlavor.stringFlavor)){
a.say("Tenha certeza de que o que voc� tem em sua �rea de transfer�ncia � um texto para que eu possa armazenar a defini��o de " + str + ".");
}else{
try{
final String key = str.trim();
final String definition = (String) t.getTransferData(DataFlavor.stringFlavor);
a.registerMemory(new Memory(){
@Override
public String key() {
return key;
}
@Override
public String value() {
return definition;
}
});
a.say("Acho que entendi! Armazenando no banco de mem�rias" + ((definition.length() > 255) ? "..." : " a defini��o de " + key + ": " + definition));
}catch (UnsupportedFlavorException e){
e.printStackTrace();
return false;
}catch (IOException e){
e.printStackTrace();
return false;
}
}
return true;
}
@Override
public int getCommandId() {
return 3;
}
}