package graphics.charts;

import java.awt.*;

/**
 * ColorUtils generates
 * bright colors for each slice of the pie.
 * Requires an integer indicating how many slices there are altogether
 * to be constructed.<BR>
 * Global variables:
 * <UL>
 * <LI> ColorMap: An array of colors, initialized to null
 * </UL>
 *
 * @author  Allison McHenry
 * @author  Douglas Lyon, PhD
 * @since   JDK 1.3
 */


public class ColorUtils {

  private Color colorMap [] = null;

  /**
   *    Constructor containing number of slices of pie that need to be drawn.
   *    Calls getColorMap function which gets each color.
   *    @param nc   Total number of colors needed (xVals.length)
   *    @see        #getColorMap
   */
  public ColorUtils(int nc) {
    initColorMap(nc);
  }

  /**
   *    Creates the Color Map using the HSB (hue, saturation, brightness)
   *    color scale, guaranteeing that each color will be fully satuated (1),
   *    fully bright(1) and of a random hue(h).
   *    Colors are more differentiated if there are few of them.
   *
   *    @param n    Number of colors needed, from constructor
   *    @return c   An array of colors to be used in drawing the pie
   *    @see        java.awt.Color.#HSBtoRGB
   */
  private void initColorMap(int n) {
    Color c [] = new Color[n];
    int i = 0;
    for (float h = 0; i < c.length; h = (float) (h + 1.0 / n)) {
      c[i] = new Color(Color.HSBtoRGB(h, 1, 1));
      i++;
    }
    colorMap = c;
  }

  public Color[] getColorMap() {
    return colorMap;
  }


  /**
   *    Walks through the
   *    array of colors and matches the data at index i with the color in
   *    the color map at index i.
   *
   *    @param i    Which specific slice is being drawn right now
   *    @return c   One color from the color map to be used in drawing this slice
   *    @see        PieGraph.#drawGraph
   */
  public Color getColor(int i) {
    return colorMap[i % colorMap.length];
  }

}