package hep.aida.ref.plotter;

import hep.aida.ref.plotter.BaseStyle;

import hep.aida.IFillStyle;
import hep.aida.ILineStyle;
import hep.aida.IMarkerStyle;

import hep.aida.IDataStyle;

import hep.aida.ref.plotter.BaseStyle;

/**
 *
 * @author The AIDA team @ SLAC.
 *
 */
public class DataStyle extends BaseStyle implements IDataStyle {
    
    private IMarkerStyle markerStyle;
    private ILineStyle   lineStyle;
    private IFillStyle   fillStyle;
    
    protected void initializeBaseStyle() {
        markerStyle = new MarkerStyle();
        lineStyle   = new LineStyle();
        fillStyle   = new FillStyle();
        addBaseStyle( markerStyle, "marker" );
        addBaseStyle( lineStyle, "line" );
        addBaseStyle( fillStyle,  "fill" );

        String[] noOptions = new String[0];
        String[] trueFalse = {"true", "false"};
        addParameter("showHistogramBars", trueFalse, "true");
        addParameter("fillHistogramBars", trueFalse, "true");

        addParameter("showDataPoints", trueFalse, "false");
        addParameter("connectDataPoints", trueFalse, "false");

        addParameter("lineBetweenPointsColor");
        addParameter("lineBetweenPointsType",LineStyle.lineTypes,LineStyle.lineTypes[0]);
        addParameter("lineBetweenPointsThickness","1");

        addParameter("customOverlay");

        addParameter("showErrorBars", trueFalse, "true");
        addParameter("errorBarsColor");
        addParameter("errorBarsLineType",LineStyle.lineTypes,LineStyle.lineTypes[0]);
        addParameter("errorBarsLineThickness","1");

        addParameter("showStatisticsBox", trueFalse, "true");
                
        String[] profileErrors = {"spread","0","errorOnMean","1"};
        addParameter("profileErrors",profileErrors,"spread");

        addParameter("functionLineColor");
        addParameter("functionLineType",LineStyle.lineTypes,LineStyle.lineTypes[0]);
        addParameter("functionLineThickness","1");
    }
    
    public IFillStyle fillStyle() {
        return fillStyle;
    }
    
    public ILineStyle lineStyle() {
        return lineStyle;
    }
    
    public IMarkerStyle markerStyle() {
        return markerStyle;
    }
    
    public boolean setFillStyle(IFillStyle fillStyle) {
        this.fillStyle = fillStyle;
        addBaseStyle( fillStyle,  "fill" );
        return true;
    }
    
    public boolean setLineStyle(ILineStyle lineStyle) {
        this.lineStyle = lineStyle;
        addBaseStyle( lineStyle, "line" );
        return true;
    }
    
    public boolean setMarkerStyle(IMarkerStyle markerStyle) {
        this.markerStyle = markerStyle;
        addBaseStyle( markerStyle, "marker" );
        return true;
    }    
}
