package io.hansel.react;

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;

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

import io.hansel.actions.configs.HanselConfigs;
import io.hansel.react.HSLReactConversionUtil;



public class HanselConfigsRn {

    private ReactApplicationContext reactContext;

    public HanselConfigsRn(ReactApplicationContext reactContext) {
        this.reactContext = reactContext;
    }

    public void getString(String configName, String fallbackValue, Callback callback) {
        String value = HanselConfigs.getString(configName, fallbackValue);
        if (callback != null) {
            callback.invoke(value);
        }
    }

    public void getBoolean(String configName, boolean fallbackValue, Callback callback) {
        boolean value = HanselConfigs.getBoolean(configName, fallbackValue);
        if (callback != null) {
            callback.invoke(value);
        }
    }

    public void getDouble(String configName, double fallbackValue, Callback callback) {
        double value = HanselConfigs.getDouble(configName, fallbackValue);
        if (callback != null) {
            callback.invoke(value);
        }
    }

    public void getList(String configName, ReadableArray defaultValue, Callback callback) {
        // This method has empty implementation on Android
        if (callback != null) {
            callback.invoke(HSLReactConversionUtil.toWritableArray(defaultValue));
        }
    }

    public void getJSONArray(String configName, ReadableArray defaultValue, Callback callback) {
        JSONArray value = HanselConfigs.getJSONArray(configName, HSLReactConversionUtil.toJSONArray(defaultValue));
        if (callback != null) {
            callback.invoke(HSLReactConversionUtil.toWritableArray(value));
        }
    }

    public void getJSONObject(String configName, ReadableMap defaultValue, Callback callback) {
        JSONObject value = HanselConfigs.getJSONObject(configName, HSLReactConversionUtil.toJsonObject(defaultValue));
        if (callback != null) {
            callback.invoke(HSLReactConversionUtil.toWritableMap(value));
        }
    }

}
