package o2mc.io.dimmldependency.Datastreams;

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

import java.util.HashMap;

/**
 * Created by nickyromeijn on 16/02/16.
 * settings object. Attributes from parsed JSON Object are stored here
 */
public class DatastreamsSettings {

    private boolean override = false;
    private boolean settingsHaveBeenSet = false;
    private boolean trackLocation = false;
    private boolean trackNetworkstate = false;
    private boolean trackUnique = true;
    private boolean onlySendWhenWifi = false;
    private String endpoint;

    private boolean mapViews = false;
    private HashMap<String, DatastreamsActivitySettings> activitySpecificSettings = new HashMap<>();

    public void set(JSONObject settings){
        if(!settingsHaveBeenSet && !override) {
            try {
                trackLocation = settings.getBoolean("location");
                trackNetworkstate = settings.getBoolean("networkstate");
                trackUnique = settings.getBoolean("unique");
                onlySendWhenWifi = settings.getBoolean("onlySendWhenWifi");
                endpoint = settings.getString("endpoint");
                settingsHaveBeenSet = true;
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

    private void override(){
        override = true;
    }

    public String getEndpoint() {
        return endpoint;
    }

    public void setTrackLocation(Boolean bool){
        trackLocation = bool;
        override();
    }

    public void setTrackNetworkstate(Boolean bool){
        trackNetworkstate = bool;
        override();
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
        override();
    }

    public boolean mapViews() { return mapViews;  }

    public void setMapViews(boolean mapViews) { this.mapViews = mapViews;  }

    public boolean trackNetworkstate() {
        return trackNetworkstate;
    }

    public boolean trackLocation() {
        return trackLocation;
    }

    public boolean trackUnique() {
        return trackUnique;
    }

    public void setTrackUnique(boolean trackUnique) {
        this.trackUnique = trackUnique;
    }

    public boolean OnlySendWhenWifi() {
        return onlySendWhenWifi;
    }

    public void setOnlySendWhenWifi(boolean onlySendWhenWifi) {
        this.onlySendWhenWifi = onlySendWhenWifi;
    }

    public DatastreamsActivitySettings getDatastreamsActivitySettings(String activity){
        return activitySpecificSettings.get(activity);
    };

    public void setDatastreamsActivitySettings(String activity, JSONObject obj) {
        activitySpecificSettings.put(activity, new DatastreamsActivitySettings(obj));
    }
}
