package curve;

public class ListCurve {
  ListCurveItem firstItem;
  public ListCurve() {
    firstItem=null;
  };
  
  public Curve getFirstCurve() {
    if(firstItem==null)
      return null;
    else {
      if(firstItem.getCurve().canDraw())
        return firstItem.getCurve();
      else return getNextCurve(firstItem.getCurve());
    };
  };

  private ListCurveItem getItem(Curve curve) {
    ListCurveItem currentItem;
    currentItem=firstItem;
    while(currentItem!=null) {
      if(currentItem.getCurve()==curve)
        return currentItem;
      else  
        currentItem=currentItem.getNext();
    };
    return null;
  };  
    
  public Curve getNextCurve(Curve curve) {
    ListCurveItem currentItem;
    currentItem=getItem(curve);
    if(currentItem!=null) {
      do {
        currentItem=currentItem.getNext();
      }while(currentItem!=null && !currentItem.getCurve().canDraw());
      if(currentItem!=null)
        return currentItem.getCurve();
    };
    return null;
  };
  
  public void addCurve(Curve newCurve) {
    //This will automatically place item before FirstItem
    ListCurveItem newItem=new ListCurveItem(newCurve,firstItem); 
    firstItem=newItem;
  };
  
  public void setCurveXY(Curve curve,int x[],int y[]) {
    ListCurveItem currentItem;
    currentItem=getItem(curve);
    if(currentItem!=null)
      currentItem.setXY(x,y);
    };    
    
  public int[] getCurveX(Curve curve) {
    ListCurveItem currentItem;
    currentItem=getItem(curve);
    if(currentItem!=null)
      return currentItem.getX();
    else
      return null;
  };

  public int[] getCurveY(Curve curve) {
    ListCurveItem currentItem;
    currentItem=getItem(curve);
    if(currentItem!=null)
      return currentItem.getY();
    else
      return null;
  };
  
  public int getNumberOfItems() {
    int count=0;
    ListCurveItem currentItem;
    currentItem=firstItem;
    while(currentItem!=null) {
      if(currentItem.getCurve().canDraw()) count++;
      currentItem=currentItem.getNext();
    };
    return count;
  };
};