package org.math.plot.plotObjects;

/**
 * BSD License
 * 
 * @author Yann RICHET
 */

import java.awt.*;

import org.math.plot.render.*;

public class BasePlot implements /*Plotable,*/BaseDependant {

  public static Color DEFAULT_COLOR = Color.DARK_GRAY;

  protected Base base;

  protected Axis[] axis;

  protected boolean visible = true;

  protected Color color;

  public BasePlot(Base b, String... as) {
    this(b, DEFAULT_COLOR, as);
  }

  public BasePlot(Base b, Color c, Axis... a) {
    base = b;
    axis = a;
    color = c;
  }

  public BasePlot(Base b, Color c, String... as) {
    base = b;
    if (as.length != base.dimension) {
      throw new IllegalArgumentException("String array of axes names must have " + base.dimension + " elements.");
    }
    color = c;
    axis = new Axis[base.dimension];
    for (int i = 0; i < base.dimension; i++) {
      axis[i] = new Axis(base, as[i], color, i);
    }
    // resetBase();
  }

  public void setVisible(boolean v) {
    visible = v;
  }

  public void setVisible(int i, boolean v) {
    axis[i].setVisible(v);
  }

  public void setGridVisible(int i, boolean v) {
    axis[i].setGridVisible(v);
  }

  public boolean getVisible() {
    return visible;
  }

  public void setColor(Color c) {
    color = c;
    for (int i = 0; i < axis.length; i++) {
      axis[i].setColor(c);
    }
  }

  public Color getColor() {
    return color;
  }

  public void setLegend(String[] as) {
    if (as.length != base.dimension) {
      throw new IllegalArgumentException("String array of axes names must have " + base.dimension + " elements.");
    }
    for (int i = 0; i < axis.length; i++) {
      axis[i].setLegend(as[i]);
    }
    // resetBase();
  }

  public void setLegend(int i, String as) {
    axis[i].setLegend(as);
    // resetBase();
  }

  public String[] getLegend() {
    String[] array = new String[axis.length];
    for (int i = 0; i < array.length; i++) {
      array[i] = axis[i].getLegend();
    }
    return array;
  }

  public String getLegend(int i) {
    return axis[i].getLegend();
  }

  public void setBase(Base b) {
    base = b;
    for (int i = 0; i < axis.length; i++) {
      axis[i].base = base;
    }
    resetBase();
  }

  public void plot(AbstractDrawer draw) {
    if (!visible)
      return;

    for (int i = 0; i < axis.length; i++)
      axis[i].plot(draw);
  }

  public Axis getAxis(int i) {
    return axis[i];
  }

  public Axis[] getAxis() {
    return axis;
  }

  public void resetBase() {
    // System.out.println("BasePlot.resetBase");
    for (int i = 0; i < axis.length; i++) {
      axis[i].resetBase();
      //base.setAxesScales(i, Base.LINEAR);
    }
  }

}