package com.iotize.plugin.cordova.zebrarfid;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class PluginResponse {

    private static final String TAG = "PluginResponse";
    private final CallbackContext callbackContext;
    private final String action;

    public PluginResponse(String action, CallbackContext callbackContext) {
        this.callbackContext = callbackContext;
        this.action = action;
    }

    public void newResult(String data) {
        PluginResult result = new PluginResult(
                PluginResult.Status.OK,
                data
        );
        result.setKeepCallback(true);
        this.callbackContext.sendPluginResult(result);
    }

    public void newResult(JSONObject data) {
        PluginResult result = new PluginResult(
                PluginResult.Status.OK,
                data
        );
        result.setKeepCallback(true);
        this.callbackContext.sendPluginResult(result);
    }

    public void newResult(PluginError error) throws JSONException {
        this.callbackContext.sendPluginResult(new PluginResult(
                PluginResult.Status.ERROR,
                DataConverter.toJSONObject(error)
        ));
    }

    public void error(Throwable err) {
        JSONObject object = DataConverter.toJSONObject(err);
        this.callbackContext.error(object);
    }

    public void success(boolean isConnected) {
        this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, isConnected));
    }

    public void success(JSONObject data) throws JSONException {
        PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, data);
        this.callbackContext.sendPluginResult(pluginResult);
    }

    public void success(JSONArray data) throws JSONException {
        PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, data);
        this.callbackContext.sendPluginResult(pluginResult);
    }

    public void success() {
        this.callbackContext.success();
    }

    public void error(String message) {
        this.callbackContext.success(message);
    }

    public void success(String msg) {
        if (msg == null) {
            this.callbackContext.success();
        }
        else {
            this.callbackContext.success(msg);
        }
    }

    public CallbackContext getCallbackContext() {
        return callbackContext;
    }

}
