package rainbowPackage;

//import javafx.scene.paint.Paint.*;
import javafx.scene.paint.Paint.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Rectangle;
import javafx.scene.image.*;
import javafx.scene.layout.StackPane;

public class ColorFader //Basic Class For Variating Colors And Determining Transparency For RainbowSoftColor.java Class
{
	public Color fxColor = Color.BLACK;
	StackPane pixelPane = new StackPane();
	Color pixelColor = Color.BLACK;
	Rectangle pixelRectangle = new Rectangle( 1, 1, fxColor );
	Image pixelImage = null;
	WritableImage bufferPicture = new WritableImage( 1, 1 );
	ImageView pixelImageView = new ImageView();
	public double colorBeingChecked = 0, opacityBeingChecked = 1;//, ColorToBeChecked = 0;
	//ColorValueFit colorValueFit = new ColorValueFit(0.);
	public ColorFader()//1st Square DiagnosticsClass.java
	{
        fxColor = fxColor.rgb( 0, 0, 0, 1 );
	}
	public ColorFader( Color FXColor )//2nd Square DiagnosticsClass.java
	{
		fxColor = FXColor;
    }
	public Object ColorFaderFunction(double ColorInterval, double Loc, Color ColorBefore, Color ColorAfter)//5th Square DiagnosticsClass.java
	{
		pixelColor.rgb( (int)ColorBefore.getRed(), (int)ColorBefore.getGreen(), (int)ColorBefore.getBlue(), OpacityValueFitter( 1 - Loc / ColorInterval ) );
		pixelRectangle = new Rectangle ( 1, 1, pixelColor);
		pixelImage = pixelRectangle.snapshot( null, bufferPicture );
		pixelPane.getBackground().fill(ColorAfter);
		
		pixelImageView.setImage( pixelImage );
		pixelPane.getChildren().add( pixelImageView );

        fxColor = pixelPane.getScene().snapshot(bufferPicture).getPixelReader().getColor( 0, 0 );
		return fxColor;
	}
	public double ColorValueFitter ( double ColorToBeChecked )//21th Square DiagnosticsClass.java
	{
		colorBeingChecked = Math.abs(ColorToBeChecked);
		while ( colorBeingChecked > 255)
			colorBeingChecked = colorBeingChecked - 255;// */
		/*colorBeingChecked = colorBeingChecked;
		while ( colorBeingChecked < 0)
			colorBeingChecked = 0;
		while ( colorBeingChecked > 255)
			colorBeingChecked = 255;// */
		return colorBeingChecked;
	}
	public double OpacityValueFitter ( double OpacityToBeChecked )//22nd Square DiagnosticsClass.java
	{
		opacityBeingChecked = Math.abs(OpacityToBeChecked);
		while ( opacityBeingChecked > 1)
			opacityBeingChecked = opacityBeingChecked - 1;// */
		/*opacityBeingChecked = OpacityBeingChecked;
		while ( opacityBeingChecked < 0)
			opacityBeingChecked = 0;
		while ( opacityBeingChecked > 1)
			opacityBeingChecked = 1;// */
		return opacityBeingChecked;
	}

	public void set(Color FXColor) { fxColor = FXColor; }//24th Square DiagnosticsClass.java
    public Object get() { return fxColor; }
    //public Object get() { return fxColor; }
}
