package com.google.refine.browsing;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

import org.json.JSONObject;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.refine.browsing.Engine.Mode;
import com.google.refine.browsing.facets.FacetConfig;
import com.google.refine.util.ParsingUtilities;


public class EngineConfig  {
    
    protected final List<FacetConfig> _facets;
    protected final Mode _mode;
    
    @JsonCreator
    public EngineConfig(
            @JsonProperty("facets")
            List<FacetConfig> facets,
            @JsonProperty("mode")
            Mode mode) {
        _facets = facets == null ? Collections.emptyList() : facets;
        _mode = mode == null ? Mode.RowBased : mode;
    }
    
    @JsonProperty("mode")
    public Mode getMode() {
        return _mode;
    }
    
    @JsonProperty("facets")
    public List<FacetConfig> getFacetConfigs() {
        return _facets;
    }
    
    public static EngineConfig reconstruct(JSONObject o) {
        if(o == null) {
            return new EngineConfig(Collections.emptyList(), Mode.RowBased);
        }
        try {
            return ParsingUtilities.mapper.readValue(o.toString(), EngineConfig.class);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}