package wonderlab.graphics.geometry;
import wonderlab.graphics.shape.*;


public class Vertex {

	private Vector3D pos;
	private Vector3D normal;
	private Vector3D color;
	private Vector3D vel;
	Material material;
	int id;
	Shape3D shape;
	
	public int px, py, pz;
	
	
	public Vertex() {

		pos = new Vector3D(4);
		normal = new Vector3D(4);
		color = new Vector3D(4);
		vel = new Vector3D(3);

		px = py = pz = 0;
		
	}
		
	public Vertex(double x, double y, double z, double nx, double ny, double nz) {

		pos = new Vector3D(4);
		normal = new Vector3D(4);
		color = new Vector3D(4);

		pos.set(0,x);
		pos.set(1,y);
		pos.set(2,z);
		pos.set(3,1.0);
		normal.set(0,nx);
		normal.set(1,ny);
		normal.set(2,nz);
		normal.set(3,0.0);
		vel = new Vector3D(3);
		
		px = py = pz = 0;
	}
	
	public Vertex(Vertex src) {
		copy(src);
	}
	
	public void copy(Vertex src) {
		pos = new Vector3D(src.pos());
		normal = new Vector3D(src.normal());
		color = new Vector3D(src.color());
		px = src.px;
		py = src.py;
		pz = src.pz;
		material = src.material();
	}
		
	
	public Vector3D normal() {
		return normal;
	}
	
	public double getX() {
		return pos.get(0);
	}

	public double getY() {
		return pos.get(1);
	}

	public double getZ() {
		return pos.get(2);
	}

	public double getW() {
		return pos.get(3);
	}
	
	public Vector3D pos() {
		return pos;
	}

	public void setPos( Vector3D src ) {
		pos.copy(src);
	}
	
	public void setMaterial(Material m) {
		material = m;
	}
	
	public Vector3D color() {
		return color;
	}

	public Material material() {
		return material;
	}
	
	public void setNormal( Vector3D src ) {
		normal.copy(src);
		normal.normalize();
	}
	
	public void add(Vertex p) {
		pos.add(p.pos());
		normal.add(p.normal());
		color.add(p.color());
	}
	
	public int getRed() {
		return (int)(color.get(0) * 255);
	}

	public int getGreen() {
		return (int)(color.get(1) * 255);
	}

	public int getBlue() {
		return (int)(color.get(2) * 255);
	}
	
	public double red() {
		return color.get(0);
	}

	public double green() {
		return color.get(1);
	}

	public double blue() {
		return color.get(2);
	}
	
	public void setColor(double r, double g, double b) {
	
		color.set(0,r);
		color.set(1,g);
		color.set(2,b);
		
	}

	public void setColor(Vector3D src) {
	
		color = src;
		
	}
	
	public Vector3D vel() {
		return vel;
	}
	
	public void print() {
	
		//pos.print("x,y,z is...");
		//normal.print("normal is...");
		//color.print("color is...");
		System.out.println("Viewport is " + px + " " + py + " " + pz);
	
	}
	
}