package com.moxtra.cordovaplugin;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.Toast;


// import com.moxtra.sdk.MXAccountManager;
// import com.moxtra.sdk.MXChatManager;
// import com.moxtra.sdk.MXException.AccountManagerIsNotValid;
// import com.moxtra.sdk.MXGroupChatSession;
// import com.moxtra.sdk.MXSDKConfig;
// import com.moxtra.sdk.MXSDKException;


import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class MoxtraPlugin extends CordovaPlugin  {

	public static final String TAG = "MoxtraPlugin.java";
	//private MXAccountManager mAccountMgr;
	protected ProgressDialog pb;
	private RumtimeParameters parameters;
	private String meetAction = "joinMeet";

	/**
	 * Constructor.
	 */
	public MoxtraPlugin() {
		
	}

	/**
	 * Sets the context of the Command. This can then be used to do things like
	 * get file paths associated with the Activity.
	 * 
	 * @param cordova
	 *            The context of the main Activity.
	 * @param webView
	 *            The CordovaWebView Cordova is running in.
	 */

	public void initialize(CordovaInterface cordova, CordovaWebView webView) {
		super.initialize(cordova, webView);
		Log.e(TAG, "Init MoxtraPlugin");
	}

	public boolean execute(final String action, JSONArray params,
			CallbackContext callbackContext) throws JSONException {

		Log.e(TAG, "MoxtraPlugin received:" + action);
		meetAction = action;

		JSONObject jsonObj = (JSONObject) params.get(0);
		parameters = new RumtimeParameters(jsonObj.getString("firstName"),
				jsonObj.getString("lastName"),
				jsonObj.getString("uniqueId"), jsonObj.getString("meetId"));
		
		parameters.setOrgId(jsonObj.getString("orgId"));

		initializeProgressdialog();
	//	initializeMoxtraAccManager(MXAccountManager.getInstance(), callbackContext);

		return true;
	}

	public void initializeProgressdialog() {
		pb = new ProgressDialog(cordova.getActivity().getApplicationContext());
		pb.setMessage("Waiting for initialization...");
		pb.setCancelable(false);
	}

	// public void initializeMoxtraAccManager(MXAccountManager _mAccountMgr, final CallbackContext callbackContext) {
	// 	mAccountMgr = _mAccountMgr;

	// 	if (!mAccountMgr.isInitialized()) {
	// 		pb.show();
	// 		try {
	// 			mAccountMgr
	// 					.initialize(new MXAccountManager.MXAccountInitializeListener() {
	// 						@Override
	// 						public void onInitializeAccountDone(boolean b) {
	// 							pb.dismiss();
	// 							initializeUser(callbackContext);
	// 						}
	// 					});
	// 		} catch (MXSDKException.InvalidParameter invalidParameter) {
	// 			invalidParameter.printStackTrace();
	// 		}
	// 	} else {
	// 		initializeUser(callbackContext);
	// 	}

	// }

	public void initializeUser(final CallbackContext callbackContext) {
		// MXSDKConfig.MXUserInfo user = null;
		// MXSDKConfig.MXProfileInfo mxProfileInfo = null;

		
		// Bitmap interviwerAvatar = BitmapFactory.decodeResource(cordova
		// 		.getActivity().getResources(),
		// 		ConstantForMoxtra.interviewerAvatarUri);
		// user = new MXSDKConfig.MXUserInfo(parameters.getUniqueId(),
		// 		MXSDKConfig.MXUserIdentityType.IdentityUniqueId);
		// mxProfileInfo = new MXSDKConfig.MXProfileInfo(
		// 		parameters.getFirstName(), parameters.getLastName(),
		// 		interviwerAvatar);

		// mAccountMgr.setupUser(user, mxProfileInfo,
		// 		"P3Soj0UYUcsBfcjdvFbJy90", new MXAccountManager.MXAccountLinkListener() {
		// 			@Override
		// 			public void onLinkAccountDone(boolean bSuccess) {
		// 				Log.e(TAG, "onLinkAccountDone(), logged-in user: "
		// 						+ mAccountMgr.getUserInfo());
		// 				if (bSuccess) {
		// 					Toast.makeText(
		// 							cordova.getActivity()
		// 									.getApplicationContext(),
		// 							"Login Success", Toast.LENGTH_LONG).show();
		// 					if ("getChatBinderList".equalsIgnoreCase(meetAction)) {
		// 						getChatBinderList(callbackContext);
								
		// 					} else if ("openChat".equalsIgnoreCase(meetAction)) {
		// 						openChat(parameters.getMeetId());
								
		// 					} else if ("startChat".equalsIgnoreCase(meetAction)) {
		// 						createChat();
								
		// 					} else if ("joinMeet".equalsIgnoreCase(meetAction)) {
		// 						//Join an existing meet.
		// 						joinMeet();
								
		// 					} else {
		// 						//start a new meet.
		// 						startMeet();
								
		// 					}
		// 				} else {
		// 					/*Toast.makeText(
		// 							cordova.getActivity()
		// 									.getApplicationContext(),
		// 							"Login Failed", Toast.LENGTH_LONG).show();*/
		// 				}
		// 			}
		// 		});
	}
	
	// private void openChat(String binderId) {
		
	// //	try {
	// 		MXChatManager.getInstance().openChat(binderId, new MXChatManager.OnOpenChatListener() {
				
	// 			@Override
	// 			public void onOpenChatSuccess() {
	// 				Log.e(TAG, "onOpenChatSuccess(), logged-in user: " + mAccountMgr.getUserInfo());
	// 			}
				
	// 			@Override
	// 			public void onOpenChatFailed(int arg0, String arg1) {
	// 				Log.e(TAG, "onOpenChatFailed(), logged-in user: " + mAccountMgr.getUserInfo());
	// 			}
	// 		});
	// 	// } catch (AccountManagerIsNotValid e) {
	// 	// 	e.printStackTrace();
	// 	// }	
	// }
	
	// private void createChat() {
		
	// 	//try {
	// 		List<String> uniqueIds = new ArrayList<String>();
	// 		uniqueIds.add("100");
	// 		uniqueIds.add("101");
			
	// 		MXChatManager.getInstance().createChat("Test chat by Ajay", uniqueIds, new MXChatManager.OnCreateChatListener() {
				
	// 			@Override
	// 			public void onCreateChatSuccess(String arg0) {
	// 				Log.e(TAG, "onCreateChatSuccess(), logged-in user: " + mAccountMgr.getUserInfo());
					
	// 			}
				
	// 			@Override
	// 			public void onCreateChatFailed(int arg0, String arg1) {
	// 				Log.e(TAG, "onCreateChatFailed(), logged-in user: " + mAccountMgr.getUserInfo());
					
	// 			}
	// 		});
	// 	// } catch (AccountManagerIsNotValid e) {
	// 	// 	e.printStackTrace();
	// 	// }	
	// }
	
	// private void getChatBinderList(CallbackContext callbackContext) {
		
	// 	/*try {
	// 		List<String> uniqueIds = new ArrayList<String>();
	// 		uniqueIds.add("zingadmin");
	// 		uniqueIds.add("ajaydarekar");
			
	// 		MXChatManager.getInstance().createChat("Test chat by Ajay", uniqueIds, new MXChatManager.OnCreateChatListener() {
				
	// 			@Override
	// 			public void onCreateChatSuccess(String arg0) {
	// 				Log.e(TAG, "onCreateChatSuccess(), logged-in user: " + mAccountMgr.getUserInfo());
					
	// 			}
				
	// 			@Override
	// 			public void onCreateChatFailed(int arg0, String arg1) {
	// 				Log.e(TAG, "onCreateChatFailed(), logged-in user: " + mAccountMgr.getUserInfo());
					
	// 			}
	// 		});
	// 	} catch (AccountManagerIsNotValid e) {
	// 		e.printStackTrace();
	// 	}*/
		
	// 	List<MXGroupChatSession> sessions = MXChatManager.getInstance().getGroupChatSessions();
	// 	Iterator<MXGroupChatSession> itr = sessions.iterator();
		
	// 	List<JSONObject> jsonArray = new ArrayList<JSONObject>();
	// 	while(itr.hasNext()){
	// 		MXGroupChatSession session = (MXGroupChatSession) itr.next();
	// 		JSONObject json = new JSONObject();
	// 	    try{
	// 	        json.put("lastFeedContent", session.getLastFeedContent());
	// 	        json.put("coverImagePath", session.getCoverImagePath());
	// 	        //json.put("hostName", session.getHostName());
	// 	        json.put("sessionID", session.getSessionID());
	// 	        json.put("topic", session.getTopic());
	// 	        json.put("unreadFeedCount", session.getUnreadFeedCount());
	// 	        json.put("lastFeedTimeStamp", session.getLastFeedTimeStamp());
	// 	        json.put("isAChat", session.isAChat());
		        
	// 	        jsonArray.add(json);
		        
	// 	    }catch(JSONException ex){
	// 	        Log.e(TAG, ex.getMessage());
	// 	        return;
	// 	    }
			
	// 	}
		
	// 	JSONObject json = new JSONObject();
	//     try{
	//         json.put("status", 200);
	//         json.put("sessions", jsonArray);
	        
	//     }catch(JSONException ex){
	//         Log.e(TAG, ex.getMessage());
	//         return;
	//     }
	//     callbackContext.success(json);		
	// }

	// private void joinMeet() {

	// 	//try {
	// 		MXChatManager.getInstance().joinMeet(parameters.getMeetId(),
	// 				parameters.getFirstName(),
	// 				new MXChatManager.OnJoinMeetListener() {
	// 					@Override
	// 					public void onJoinMeetDone(String meetId, String meetUrl) {
	// 						Log.d(TAG, "Joined meet: " + meetId);
							
	// 					}

	// 					@Override
	// 					public void onJoinMeetFailed() {
	// 						Log.e(TAG, "Unable to join meet.");
	// 					}
	// 				});
			
	// 	// } catch (MXSDKException.MeetIsInProgress meetIsInProgress) {
	// 	// 	Log.e(TAG, "Error when join meet", meetIsInProgress);
	// 	// } catch (Exception ex) {
	// 	// 	ex.printStackTrace();
	// 	// }
	// }

	// private void startMeet() {
		
	// //	try {
	// 		MXChatManager.getInstance().startMeet(parameters.getUniqueId(),
	// 				null, null, new MXChatManager.OnStartMeetListener() {
	// 					@Override
	// 					public void onStartMeetDone(String meetId,
	// 							String meetUrl) {
	// 						Log.d(TAG, "Meet started: " + meetId);
	// 						Toast.makeText(
	// 								cordova.getActivity()
	// 										.getApplicationContext(),
	// 								"Meet started: " + meetId,
	// 								Toast.LENGTH_LONG).show();
	// 					}

	// 					@Override
	// 					public void onStartMeetFailed(int i, String s) {
	// 						Log.e(TAG, "onStartMeetFailed: " + s);
	// 						Toast.makeText(
	// 								cordova.getActivity()
	// 										.getApplicationContext(),
	// 								"onStartMeetFailed: " + s,
	// 								Toast.LENGTH_LONG).show();
	// 					}
	// 				});
			
	// 	// } catch (MXSDKException.Unauthorized unauthorized) {
	// 	// 	Log.e(TAG, "Error when start meet", unauthorized);
	// 	// 	Toast.makeText(cordova.getActivity().getApplicationContext(),
	// 	// 			"Error when start meet" + unauthorized, Toast.LENGTH_LONG)
	// 	// 			.show();
	// 	// } catch (MXSDKException.MeetIsInProgress meetIsInProgress) {
	// 	// 	Log.e(TAG, "Error when start meet", meetIsInProgress);
	// 	// 	Toast.makeText(cordova.getActivity().getApplicationContext(),
	// 	// 			"Error when start meet" + meetIsInProgress,
	// 	// 			Toast.LENGTH_LONG).show();
	// 	// }
	// }

}