// Path: androidsdk/src/main/java/com/wootric/androidsdk/network/WootricApiCallback.java
// public interface WootricApiCallback {
//     void onAuthenticateSuccess(String accessToken);
//     void onGetEndUserIdSuccess(long endUserId);
//     void onEndUserNotFound();
//     void onCreateEndUserSuccess(long endUserId);
//     void onApiError(Exception error);
// }
// 
// Path: androidsdk/src/main/java/com/wootric/androidsdk/utils/Utils.java
// public final class Utils {
// 
//     private Utils(){}
// 
//     public static <T> T checkNotNull(T object, String objectDescription) {
//         if(object == null) {
//             throw new IllegalArgumentException(objectDescription + " must not be null");
//         }
// 
//         return object;
//     }
// 
//     public static boolean isNotEmpty(String s) {
//         return s != null && !s.isEmpty() && !isWhitespaceString(s);
//     }
// 
//     public static boolean isBlank(String s) {
//         return s == null || (s != null && (s.isEmpty() || isWhitespaceString(s)));
//     }
// 
//     private static boolean isWhitespaceString(String s) {
//         return s.trim().length() == 0;
//     }
// 
//     public static void checkDate(long date) {
//         if (date > 9999999999L) {
//             Log.d(Constants.TAG, "WARNING: The created date exceeds the maximum 10 characters allowed. " +
//                     "If you are using System.currentTimeMillis() divide it by 1000.");
//         } else {
//             Date d = new Date(date * 1000L);
//             Date now = new Date();
//             if (d.after(now)){
//                 Log.d(Constants.TAG, "WARNING: The created date is on the future");
//             }
//         }
//     }
// 
//     public static byte getByteValue(Boolean bool) {
//         if (bool != null) {
//             return bool ? (byte) 1 : (byte) 0;
//         } else {
//             return (byte) 0;
//         }
//     }
// 
//     public static boolean startsWithEU(String aString) {
//         return aString.startsWith("NPS-EU");
//     }
// }


import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.util.Log;
import com.wootric.androidsdk.BuildConfig;
import com.wootric.androidsdk.network.WootricApiCallback;
import com.wootric.androidsdk.utils.Utils;
        return builder.build().getEncodedQuery();
    }

    public String readInput(InputStream stream) throws IOException {
        int ch;
        StringBuilder sb = new StringBuilder();
        while((ch = stream.read())!= -1)
            sb.append((char)ch);
        return sb.toString();
    }

    public void addOptionalParam(String key, Object param) {
        if(param != null) {
            paramsMap.put(key, String.valueOf(param));
        }
    }

    protected void onError(Exception e) {
        if(wootricApiCallback != null)
            wootricApiCallback.onApiError(e);
    }

    protected void onInvalidResponse(String message) {
        if(wootricApiCallback != null) {
            RuntimeException exception = new IllegalArgumentException(message);
            wootricApiCallback.onApiError(exception);
        }
    }

    protected String getApiEndpoint() {
// Path: androidsdk/src/main/java/com/wootric/androidsdk/network/WootricApiCallback.java
// public interface WootricApiCallback {
//     void onAuthenticateSuccess(String accessToken);
//     void onGetEndUserIdSuccess(long endUserId);
//     void onEndUserNotFound();
//     void onCreateEndUserSuccess(long endUserId);
//     void onApiError(Exception error);
// }
// 
// Path: androidsdk/src/main/java/com/wootric/androidsdk/utils/Utils.java
// public final class Utils {
// 
//     private Utils(){}
// 
//     public static <T> T checkNotNull(T object, String objectDescription) {
//         if(object == null) {
//             throw new IllegalArgumentException(objectDescription + " must not be null");
//         }
// 
//         return object;
//     }
// 
//     public static boolean isNotEmpty(String s) {
//         return s != null && !s.isEmpty() && !isWhitespaceString(s);
//     }
// 
//     public static boolean isBlank(String s) {
//         return s == null || (s != null && (s.isEmpty() || isWhitespaceString(s)));
//     }
// 
//     private static boolean isWhitespaceString(String s) {
//         return s.trim().length() == 0;
//     }
// 
//     public static void checkDate(long date) {
//         if (date > 9999999999L) {
//             Log.d(Constants.TAG, "WARNING: The created date exceeds the maximum 10 characters allowed. " +
//                     "If you are using System.currentTimeMillis() divide it by 1000.");
//         } else {
//             Date d = new Date(date * 1000L);
//             Date now = new Date();
//             if (d.after(now)){
//                 Log.d(Constants.TAG, "WARNING: The created date is on the future");
//             }
//         }
//     }
// 
//     public static byte getByteValue(Boolean bool) {
//         if (bool != null) {
//             return bool ? (byte) 1 : (byte) 0;
//         } else {
//             return (byte) 0;
//         }
//     }
// 
//     public static boolean startsWithEU(String aString) {
//         return aString.startsWith("NPS-EU");
//     }
// }


// Path: androidsdk/src/main/java/com/wootric/androidsdk/network/tasks/WootricRemoteRequestTask.java
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.util.Log;
import com.wootric.androidsdk.BuildConfig;
import com.wootric.androidsdk.network.WootricApiCallback;
import com.wootric.androidsdk.utils.Utils;

        return builder.build().getEncodedQuery();
    }

    public String readInput(InputStream stream) throws IOException {
        int ch;
        StringBuilder sb = new StringBuilder();
        while((ch = stream.read())!= -1)
            sb.append((char)ch);
        return sb.toString();
    }

    public void addOptionalParam(String key, Object param) {
        if(param != null) {
            paramsMap.put(key, String.valueOf(param));
        }
    }

    protected void onError(Exception e) {
        if(wootricApiCallback != null)
            wootricApiCallback.onApiError(e);
    }

    protected void onInvalidResponse(String message) {
        if(wootricApiCallback != null) {
            RuntimeException exception = new IllegalArgumentException(message);
            wootricApiCallback.onApiError(exception);
        }
    }

    protected String getApiEndpoint() {
        return Utils.startsWithEU(this.accountToken) ? EU_API_ENDPOINT : API_ENDPOINT;