package alm.motiv.AlmendeMotivator;
import alm.motiv.AlmendeMotivator.models.Message;
import alm.motiv.AlmendeMotivator.models.User;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.text.format.Time;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.*;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.model.GraphUser;
import com.google.analytics.tracking.android.EasyTracker;
import com.mongodb.*;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
/**
* Created by Gebruiker on 22-4-14.
*/
public class MessageCreateActivity extends Activity {
private Spinner spinnerFriends;
//menu
private String[] mMenuOptions;
private ListView mDrawerList;
private DrawerLayout mDrawerLayout;
//views
private ImageView challengeePic;
private ImageView challengerPic;
private TextView txtAuthor;
private TextView txtReceiver;
private String challengee;
private String challenger = Cookie.getInstance().userEntryId;
private String[] facebookFriends = {"loading..."};
private String[] facebookFriendsName = {"loading..."};
private String friendName;
private String messageText = "";
private ProgressDialog simpleWaitDialog;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_messagecreate);
mMenuOptions = getResources().getStringArray(R.array.profile_array);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item_menu, mMenuOptions));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
/*spinnerFriends = (Spinner) findViewById(R.id.spinner_getFriends);
//GET FRIENDS
spinnerFriends.setOnTouchListener(Spinner_OnTouch);
spinnerFriends.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
challengee = facebookFriends[spinnerFriends.getSelectedItemPosition()];
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});*/
challengeePic = (ImageView) findViewById(R.id.imgChallengee);
challengerPic = (ImageView) findViewById(R.id.imgChallenger);
txtAuthor = (TextView) findViewById(R.id.txtAuthor);
txtReceiver = (TextView) findViewById(R.id.txtReceiver);
updatePicture(challenger, Cookie.getInstance().userName, challengerPic, txtAuthor);
DatabaseThread2 dbT = new DatabaseThread2();
dbT.execute();
mMenuOptions = getResources().getStringArray(R.array.profile_array);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item_menu, mMenuOptions));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
}
//on menu pressed
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
mDrawerLayout.openDrawer(Gravity.LEFT);
return true;
} else {
return super.onKeyUp(keyCode, event);
}
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
Menu.selectItem(position, MessageCreateActivity.this);
}
}
/* public void updateFriends() {
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, facebookFriendsName);
spinnerFriends.setAdapter(spinnerArrayAdapter);
}
private View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
updateFriends();
}
return false;
}
};*/
@Override
public void onStart() {
super.onStart();
//google analytics
EasyTracker.getInstance(this).activityStart(this); // Add this method.
}
@Override
public void onStop() {
super.onStop();
//google analytics
EasyTracker.getInstance(this).activityStop(this); // Add this method.
}
public void updatePicture(String id, String name, ImageView userPic, TextView userName) {
userName.setText(name);
String imgId = "https://graph.facebook.com/" + id + "/picture?type=normal&height=200&width=200";
Picasso.with(getApplicationContext()).load(imgId).into(userPic);
userPic.setMinimumHeight(200);
}
public void onSelectFriendsPressed(View v) {
if(Cookie.getInstance().internet){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose the challengee")
.setItems(facebookFriendsName, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
challengee = facebookFriends[which];
updatePicture(challengee, facebookFriendsName[which], challengeePic, txtReceiver);
}
});
builder.create();
builder.show();
}
}
class DatabaseThread2 extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
if(Cookie.getInstance().internet){
try{
MongoClient client = Database.getInstance();
DB db = client.getDB(Database.uri.getDatabase());
DBCollection userCollection = db.getCollection("user");
userCollection.setObjectClass(User.class);
Session session = Session.getActiveSession();
Request request = new Request(session, "me", null, HttpMethod.GET);
Response response = request.executeAndWait();
User curUser = new User();
curUser.put("facebookID", Cookie.getInstance().userEntryId);
User newUser = (User) userCollection.find(curUser).toArray().get(0);
ArrayList<String> arrayMessages = (ArrayList<String>) newUser.get("friends");
String[] facebookFriendsTemp = new String[arrayMessages.toArray().length];
String[] facebookFriendsNameTemp = new String[arrayMessages.toArray().length];
for (int i = 0; i < arrayMessages.toArray().length; i++) {
facebookFriendsTemp[i] = arrayMessages.toArray()[i].toString().replace("{ " + '"' + "facebookID" + '"' + " : " + '"',"").replace('"' + "}","");
request = new Request(session, facebookFriendsTemp[i], null, HttpMethod.GET);
response = request.executeAndWait();
if (response.getError() != null) {
System.out.println("NOPE");
} else {
GraphUser graphUser = response.getGraphObjectAs(GraphUser.class);
facebookFriendsNameTemp[i] = graphUser.getName();
}
}
facebookFriends = facebookFriendsTemp;
facebookFriendsName = facebookFriendsNameTemp;
}catch (Exception e){
System.out.println(e);
}
}
return null;
}
}
class DatabaseThread extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
if(Cookie.getInstance().internet){
try{
MongoClient client = Database.getInstance();
DB db = client.getDB(Database.uri.getDatabase());
DBCollection userCollection = db.getCollection("messages");
userCollection.setObjectClass(Message.class);
/*DBObject query = QueryBuilder.start("Author").is(challenger).get();
query = QueryBuilder.start("Receiver").is(challengee).get();*/
BasicDBObject query = new BasicDBObject();
query.put("Author", challenger);
query.put("Receiver", challengee);
DBCursor cursor = userCollection.find(query);
BasicDBObject query2 = new BasicDBObject();
query2.put("Receiver", challenger);
query2.put("Author", challengee);
DBCursor cursor2 = userCollection.find(query2);
/*System.out.println("ff tellen: " + cursor.count());
System.out.println("ff tellen 2: " + cursor2.count());*/
EditText textContent = (EditText) findViewById(R.id.txtChallengeContent);
String message = message = Cookie.getInstance().userName + ": " + textContent.getText().toString();
Time now = new Time();
now.setToNow();
String date = (now.year + "/" + now.month + "/" + now.monthDay + "-" + now.hour + ":" + now.minute + ":" + now.second);
if(cursor.count()==0 && cursor2.count()==0){
ArrayList<String> messages = new ArrayList<String>();
messages.add(message);
Message challenge = new Message(challengee, challenger, "Test Message", messages, "Normal message", "0");
userCollection.insert(challenge, WriteConcern.ACKNOWLEDGED);
messageText = "Message Send!";
} else{
Session session = Session.getActiveSession();
Request request = new Request(session, challengee, null, HttpMethod.GET);
Response response = request.executeAndWait();
GraphUser graphUser = response.getGraphObjectAs(GraphUser.class);
String challengeeName = graphUser.getName();
messageText = "You already have a conversation with " + challengeeName;
}
}catch (Exception e){
System.out.println(e);
}
}
/* else {
BasicDBObject update = new BasicDBObject();
update.put("$push", new BasicDBObject("Content", message));
Message newFriend = new Message();
newFriend.put("Receiver", challengee);
userCollection.update(newFriend, update);
}*/
return null;
}
@Override
protected void onPreExecute() {
simpleWaitDialog = ProgressDialog.show(MessageCreateActivity.this,
"Please wait", "Processing");
}
@Override
protected void onPostExecute(String result) {
try {
simpleWaitDialog.dismiss();
simpleWaitDialog = null;
} catch (Exception e) {
// nothing
}
Toast.makeText(getApplicationContext(), messageText, Toast.LENGTH_LONG).show();
finish();
Intent home = new Intent(MessageCreateActivity.this, MessageActivity.class);
startActivity(home);
//return;
}
}
public void sendMessage(View v) {
/*System.out.println("dit:" + challengee);*/
if(challengee != null && challengee != "loading..."){
DatabaseThread db = new DatabaseThread();
db.execute();
} else{
Toast.makeText(getApplicationContext(), "Not everything is filled in properly.", Toast.LENGTH_LONG).show();
}
}
public void onBackPressed() {
finish();
Intent home = new Intent(MessageCreateActivity.this, MessageActivity.class);
startActivity(home);
return;
}
}