package com.helpshift.android;

import com.helpshift.*;
import java.io.File;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.PluginResult;
import org.json.JSONObject;
import org.json.JSONArray;

class HelpshiftDelegate implements Helpshift.HelpshiftDelegate {

	private static CallbackContext delegateSessionCB;
	private static CallbackContext delegateConversationCB;

	public static void setSessionDelegateListener(CallbackContext contextCB) {
		delegateSessionCB = contextCB;
	}

	public static void setConversationDelegateListener(CallbackContext contextCB) {
		delegateConversationCB = contextCB;
	}
	@Override
	public void helpshiftSessionBegan() {
		if(delegateSessionCB != null) {
			JSONObject array = new JSONObject();
			try {
				array.put("eventname","Session_Start");
			} catch(Exception e) {
				Log.e("HelpshiftDebug",e.toString());
			}
			PluginResult result = new PluginResult(PluginResult.Status.OK, array);
			result.setKeepCallback(true);
			delegateSessionCB.sendPluginResult(result);
		}
	}

	@Override
	public void helpshiftSessionEnded() {
		if(delegateSessionCB != null) {
			JSONObject array = new JSONObject();
			try {
				array.put("eventname","Session_End");
			} catch(Exception e) {
				Log.e("HelpshiftDebug",e.toString());
			}
			PluginResult result = new PluginResult(PluginResult.Status.OK, array);
			result.setKeepCallback(true);
			delegateSessionCB.sendPluginResult(result);
        }
	}

	@Override
	public void newConversationStarted(String newConversationMessage) {
		if(delegateConversationCB != null) {
			JSONObject array = new JSONObject();
			try {
				array.put("eventname","newConversationStarted");
				array.put("newConversationMessage",newConversationMessage);
			} catch(Exception e) {
				Log.e("HelpshiftDebug",e.toString());
			}
			PluginResult result = new PluginResult(PluginResult.Status.OK, array);
			result.setKeepCallback(true);
			delegateConversationCB.sendPluginResult(result);
        }
	}

	@Override
	public void userRepliedToConversation(String newMessage) {
		if(delegateConversationCB != null) {
			JSONObject array = new JSONObject();
			try {
				array.put("eventname","userRepliedToConversation");
				array.put("userRepliedMessage",newMessage);
			} catch(Exception e) {
				Log.e("HelpshiftDebug",e.toString());
			}
			PluginResult result = new PluginResult(PluginResult.Status.OK, array);
			result.setKeepCallback(true);
			delegateConversationCB.sendPluginResult(result);
        }
	}

	@Override
	public void userCompletedCustomerSatisfactionSurvey(int rating, String feedback) {
		if(delegateConversationCB != null) {
			JSONObject array = new JSONObject();
			try {
				array.put("eventname","userCompletedCustomerSatisfactionSurvey");
				array.put("rating",String.valueOf(rating));
				array.put("feedback",feedback);
			} catch(Exception e) {
				Log.e("HelpshiftDebug",e.toString());
			}
			PluginResult result = new PluginResult(PluginResult.Status.OK, array);
			result.setKeepCallback(true);
			delegateConversationCB.sendPluginResult(result);
        }
	}

	@Override
	public void displayAttachmentFile(File attachmentFile) {
        //NOP
	}

	@Override
	public void didReceiveNotification(int newMessagesCount) {
		if(newMessagesCount > 0)
		{
			if(delegateConversationCB != null) {
				JSONObject array = new JSONObject();
				try {
					array.put("eventname","didReceiveNotification");
					array.put("newMessagesCount",String.valueOf(newMessagesCount));
				} catch(Exception e) {
					Log.e("HelpshiftDebug",e.toString());
				}
				PluginResult result = new PluginResult(PluginResult.Status.OK, array);
				result.setKeepCallback(true);
				delegateConversationCB.sendPluginResult(result);
        	}
		}
	}
}
