package com.indigitall.cordova.utils;

import com.indigitall.android.liveactivity.models.LADevice;
import com.indigitall.android.liveactivity.models.LiveActivity;
import com.indigitall.android.push.models.Device;
import com.indigitall.android.push.models.Topic;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LAParseUtils {

    public static final String JSON_LA_ID = "laId";
    public static final String JSON_CREATED_AT = "createdAt";
    public static final String JSON_UPDATED_AT = "updatedAt";
    public static final String JSON_APPLICATION_ID = "applicationId";
    public static final String JSON_LIVE_ACTIVITY_EXTERNAL_ID = "liveActivityExternalId";
    public static final String JSON_STATUS = "status";
    public static final String JSON_ANDROID_TOPIC_ID = "androidTopicId";
    public static JSONObject jsonFromDevice(LADevice device) {
        final String JSON_ENABLE = "enable";
        final String JSON_DEVICE_ID = "deviceId";
        final String JSON_PUSH_TOKEN = "pushToken";
        final String JSON_PLATFORM = "platform";
        final String JSON_VERSION = "version";
        final String JSON_PRODUCT_NAME = "productName";
        final String JSON_PRODUCT_VERSION = "productVersion";
        final String JSON_OS_NAME = "osName";
        final String JSON_OS_VERSION = "osVersion";
        final String JSON_DEVICE_BRAND = "deviceBrand";
        final String JSON_DEVICE_MODEL = "deviceModel";
        final String JSON_OPERATOR = "operator";
        final String JSON_DEVICE_TYPE = "deviceType";
        final String JSON_APP_VERSION = "appVersion";
        final String JSON_LOCALE = "locale";
        final String JSON_TIME_ZONE = "timeZone";
        final String JSON_TIME_OFFSET = "timeOffset";
        final String JSON_EXTERNAL_APPS = "externalApps";
        final String JSON_EXTERNAL_CODE = "externalCode";

        JSONObject json = new JSONObject();
        try {
            json.put(JSON_ENABLE, device.getEnabled());
            json.put(JSON_DEVICE_ID, device.getDeviceId());
            json.put(JSON_PLATFORM, device.getPlatform());
            json.put(JSON_VERSION, device.getVersion());
            json.put(JSON_PRODUCT_NAME, device.getProductName());
            json.put(JSON_PRODUCT_VERSION, device.getProductVersion());
            json.put(JSON_OS_NAME, device.getOsName());
            json.put(JSON_OS_VERSION, device.getOsVersion());
            json.put(JSON_DEVICE_BRAND, device.getDeviceBrand());
            json.put(JSON_DEVICE_MODEL, device.getDeviceModel());
            json.put(JSON_OPERATOR, device.getOperator());
            json.put(JSON_DEVICE_TYPE, device.getDeviceType());
            json.put(JSON_APP_VERSION, device.getAppVersion());
            json.put(JSON_LOCALE, device.getLocale());
            json.put(JSON_TIME_ZONE, device.getTimeZone());
            json.put(JSON_TIME_OFFSET, device.getTimeOffset());
            json.put(JSON_EXTERNAL_CODE, device.getExternalCode());
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        return json;
    }

    public static ArrayList<String> parseTopics(JSONArray params) {
        ArrayList<String> topics = new ArrayList<>();
        if (params != null) {
            for (int i = 0; i < params.length(); i++) {
                try {
                    String topic = params.getString(i);
                    if (topic != null && !topic.isEmpty()) {
                        topics.add(topic);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
        return topics;
    }

    public static JSONArray liveActivityListToJson(ArrayList<LiveActivity> arrayList) {
        JSONArray array = new JSONArray();
        for (LiveActivity la : arrayList) {
            array.put(liveActivityToJson(la));
        }
        return array;
    }

    public static JSONObject liveActivityToJson(LiveActivity la) {
        JSONObject json = new JSONObject();
        try {
            if (la.getLiveActivityId() != null) json.put(JSON_LA_ID, la.getLiveActivityId());
            if (la.getCreatedAt() != null) json.put(JSON_CREATED_AT, la.getCreatedAt());
            if (la.getUpdatedAt() != null) json.put(JSON_UPDATED_AT, la.getUpdatedAt());
            if (la.getApplicationId() != null) json.put(JSON_APPLICATION_ID, la.getApplicationId());
            if (la.getLiveActivityExternalId() != null)
                json.put(JSON_LIVE_ACTIVITY_EXTERNAL_ID, la.getLiveActivityExternalId());
            if (la.getStatus() != null) json.put(JSON_STATUS, la.getStatus());
            if (la.getAndroidTopicId() != null)
                json.put(JSON_ANDROID_TOPIC_ID, la.getAndroidTopicId());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;
    }

    public static JSONArray jsonArrayFromTopicArray(ArrayList<String> topics) {
        JSONArray json = new JSONArray();
        for (String topic : topics) {
            json.put(topic);
        }

        return json;
    }
}
