import java.awt.*;
import java.awt.event.*;



class RGBPanel extends Panel implements AdjustmentListener, ActionListener {
  Scrollbar rSlider, gSlider, bSlider, iSlider;
  int rValue, gValue, bValue, iValue;
  Label rValLabel, gValLabel, bValLabel, iValLabel, typeLabel;
  int numLights;
  Light curLight;
  Light[] light;
  int lightType;
  Pipeline parent;
  Button btRight, btLeft;


  static String typeName[] = { "Ambient", "Directional", "Point" };

  RGBPanel(String name, Light[] light, Pipeline parent) {
    enableEvents(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED);
    
    this.parent = parent;

    this.light = light;
    numLights = light.length;
    curLight = light[0];
    lightType = curLight.lightType;

    rValue = 128;
    gValue = 128;
    bValue = 128;
    iValue = 0;
    
    rSlider = new Scrollbar(Scrollbar.HORIZONTAL, (int)(curLight.ir*255), 1, 0, 255);
    gSlider = new Scrollbar(Scrollbar.HORIZONTAL, (int)(curLight.ig*255), 1, 0, 255);
    bSlider = new Scrollbar(Scrollbar.HORIZONTAL, (int)(curLight.ib*255), 1, 0, 255);
    iSlider = new Scrollbar(Scrollbar.VERTICAL, 0, 1, 0, 2);
    
    rSlider.addAdjustmentListener(this);
    gSlider.addAdjustmentListener(this);
    bSlider.addAdjustmentListener(this);
    iSlider.addAdjustmentListener(this);

    rSlider.setSize(100,10);
    

    rValLabel = new Label(String.valueOf((int)(curLight.ir*255)));
    gValLabel = new Label(String.valueOf((int)(curLight.ig*255)));
    bValLabel = new Label(String.valueOf((int)(curLight.ib*255)));
    iValLabel = new Label("0");
 
    typeLabel = new Label(typeName[curLight.lightType]);

    GridLayout layout = new GridLayout(0,3);
    layout.setVgap(20);

    setLayout(layout);

    add(new Label(name));
    add(new Label("  "));
    add(new Label("  "));
    add(new Label("Red:"));
    add(rSlider);
    add(rValLabel);
    add(new Label("Green:"));
    add(gSlider);
    add(gValLabel);
    add(new Label("Blue:"));
    add(bSlider);
    add(bValLabel);
   
    add(new Label("Light#:"));
    add(iSlider);
    add(iValLabel);
    add(new Label("Type: "));
    add(typeLabel);
    add(new Label("  "));

    btRight = new Button("Right");
    btLeft = new Button("Left");
    btRight.addActionListener(this);
    btLeft.addActionListener(this);
    add(new Label("Rotate: "));
    add(btLeft);
    add(btRight);

  }

  public void actionPerformed(ActionEvent e) {
    //    System.err.println(e.getActionCommand());
    if(e.getActionCommand().equals("Left")) 
      parent.rotateLeft();
    else
      parent.rotateRight();
  }

  
  public void adjustmentValueChanged(AdjustmentEvent e) {
    //    System.err.println(e.getValue());
  
    if(e.getAdjustable().equals(rSlider)) {
      rValue = e.getValue();
      rValLabel.setText(String.valueOf(rValue));
      curLight.ir = (float)rValue/255f;  
      parent.DrawObject();
    }
    if(e.getAdjustable().equals(gSlider)) {
      gValue = e.getValue();
      gValLabel.setText(String.valueOf(gValue));
      curLight.ig = (float)gValue/255f;  
      parent.DrawObject();
    }
    if(e.getAdjustable().equals(bSlider)) {
      bValue = e.getValue();
      bValLabel.setText(String.valueOf(bValue));
      curLight.ib = (float)bValue/255f;
      parent.DrawObject();
    }
    if(e.getAdjustable().equals(iSlider)) {
      iValue = e.getValue();
      iValLabel.setText(String.valueOf(iValue));
      curLight = light[iValue];
      rValue = (int)(curLight.ir * 255);
      gValue = (int)(curLight.ig * 255);
      bValue = (int)(curLight.ib * 255);
      rValLabel.setText(String.valueOf(rValue));
      gValLabel.setText(String.valueOf(gValue));
      bValLabel.setText(String.valueOf(bValue));
      rSlider.setValue(rValue);
      gSlider.setValue(gValue);
      bSlider.setValue(bValue);
      lightType = curLight.lightType;
      //      String strType = (lightType == Light.POINT ? "Point" : (lightType == Light.AMBIENT ? "Ambient" : "Directional")); 
      typeLabel.setText(typeName[lightType]);
    }	
  }

  
  
}
