package io.branch.rnbranch;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import android.content.Context;
import android.util.Log;

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

import javax.annotation.Nullable;

/**
 * Created by jdee on 6/7/17.
 */

public class RNBranchConfig {
    private JSONObject mConfiguration = null;
    public static final String TAG = "RNBranchConfig";

    public RNBranchConfig(Context context) {
        try {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(context.getAssets().open("branch.json")));
            } catch (FileNotFoundException e) {
                return;
            }

            StringBuilder builder = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }

            mConfiguration = new JSONObject(builder.toString());
        }
        catch (IOException e) {
            Log.e(TAG, "Error loading branch.json: " + e.getMessage());
        }
        catch (JSONException e) {
            Log.e(TAG, "Error parsing branch.json: " + e.getMessage());
        }
    }

    @Nullable
    public Object get(String key) {
        if (mConfiguration == null) return null;

        try {
            if (!mConfiguration.has(key)) return null;
            return mConfiguration.get(key);
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return null;
        }
    }

    public boolean getDebugMode() {
        if (mConfiguration == null) return false;

        try {
            if (!mConfiguration.has("debugMode")) return false;
            return mConfiguration.getBoolean("debugMode");
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return false;
        }
    }

    @Nullable
    public String getBranchKey() {
        if (mConfiguration == null) return null;

        try {
            if (!mConfiguration.has("branchKey")) return null;
            return mConfiguration.getString("branchKey");
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return null;
        }
    }

    @Nullable
    public String getLiveKey() {
        if (mConfiguration == null) return null;

        try {
            if (!mConfiguration.has("liveKey")) return null;
            return mConfiguration.getString("liveKey");
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return null;
        }
    }

    @Nullable
    public String getTestKey() {
        if (mConfiguration == null) return null;

        try {
            if (!mConfiguration.has("testKey")) return null;
            return mConfiguration.getString("testKey");
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return null;
        }
    }

    public boolean getUseTestInstance() {
        if (mConfiguration == null) return false;

        try {
            if (!mConfiguration.has("useTestInstance")) return false;
            return mConfiguration.getBoolean("useTestInstance");
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return false;
        }
    }

    public boolean getEnableFacebookLinkCheck() {
        if (mConfiguration == null) return false;

        try {
            if (!mConfiguration.has("enableFacebookLinkCheck")) return false;
            return mConfiguration.getBoolean("enableFacebookLinkCheck");
        }
        catch (JSONException exception) {
            Log.e(TAG, "Error parsing branch.json: " + exception.getMessage());
            return false;
        }
    }
}
