package com.contentsquare.rn.utils;

import android.util.Log;

import com.contentsquare.android.api.model.CustomVar;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableType;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;

import java.util.List;
import java.util.Map;

public class MapUtil {
    public static void convertAndAddToCustomVarList(ReadableMap map, List<CustomVar> customVarList) {
        try {
            int index = map.getInt("index");
            String key = map.getString("key");
            String value = map.getString("value");
            customVarList.add(new CustomVar(index, key, value));
        } catch (Exception e) {
            Log.e("CSLIB", e.toString());
        }
    }

    public static WritableArray convertListOfMapsToWritableArray(List<? extends Map<String, ? extends Object>> listOfMaps) {
        WritableArray writableArray = Arguments.createArray();

        for (Map<String, ? extends Object> flags : listOfMaps) {
            WritableMap writableMap = convertMapToWritableMap(flags);
            writableArray.pushMap(writableMap);
        }

        return writableArray;
    }

    public static WritableMap convertMapToWritableMap(Map<String, ? extends Object> map) {
        WritableMap writableMap = Arguments.createMap();

        for (Map.Entry<String, ? extends Object> entry : map.entrySet()) {
            Object value = entry.getValue();
            if (value instanceof String) {
                writableMap.putString(entry.getKey(), (String) value);
            } else if (value instanceof Integer) {
                writableMap.putInt(entry.getKey(), (Integer) value);
            } else if (value instanceof Boolean) {
                writableMap.putBoolean(entry.getKey(), (Boolean) value);
            }
        }

        return writableMap;
    }
    public static Object getValueForKey(ReadableMap readableMap, String key) {
        if (readableMap.hasKey(key)) {
            ReadableType type = readableMap.getType(key);

            switch (type) {
                case Null:
                    return null;
                case Boolean:
                    return readableMap.getBoolean(key);
                case Number:
                    return readableMap.getDouble(key);
                case String:
                    return readableMap.getString(key);
                case Map:
                    return readableMap.getMap(key);
                case Array:
                    return readableMap.getArray(key);
            }
        }
        return null;
    }

}
