import java.awt.*;
import java.applet.*;
import java.net.*;
import java.util.*;
//
//
// TestApplet
//
//
public class TestApplet extends Applet
{
	Playfield pf;
	AnimatedSprite s1, s2, s3;
	AnimatedSprite selectedSprite;
	Vector states;
	Scrollbar sbar;
	Label translab;

	int tick = 0;
	
	public TestApplet(){
	}

	public void start(){
	}

	void addState(){

		Point s1p = s1.getPos();
		Point s2p = s2.getPos();
		Point s3p = s3.getPos();

		Vector vstate = new Vector();
		vstate.addElement(s1p);
		vstate.addElement(s2p);
		vstate.addElement(s3p);
		states.addElement(vstate);

		//System.out.println(states);
	}

	public void init(){
		setLayout(null);
		sbar = new Scrollbar(Scrollbar.HORIZONTAL, 7, 1, 0, 10);

		//Button b1 = new Button("Record");
		Button b2 = new Button("Playback");

		String str = getParameter("trans");
		boolean trans;

		if(str.equals("true")) trans = true;
		else trans = false;


		//add(b1);
		add(b2);
		add(sbar);

		//b1.setBounds(10,0,100,20);
		b2.reshape(10,10,100,20);
		sbar.reshape(150,10,200,20);
		translab = new Label("Transparent Pixel");
		add(translab);
		translab.reshape(10,30,150,20);

		System.out.println("init");
		try{
			states = new Vector();
		
		//URL su = new URL("http://charliee.mit.edu", "bg.gif");
		//URL bgu = new URL("http://graphics.lcs.mit.edu/classes/6.837/F98/Project1", "Monkey.gif");
		
		System.out.println("here");
		Image bg = getImage(getDocumentBase(), "bg.gif" );
		//if(i == null) System.out.println("image is null");
		
		Image i1 = getImage(getDocumentBase(), "Monkey.gif");
		Image i2 = getImage(getDocumentBase(), "Ant.gif");
		Image i3 = getImage(getDocumentBase(), "crab.gif");



		MediaTracker mt = new MediaTracker(this);
		mt.addImage(i1,1);
		mt.addImage(i2,2);
		mt.addImage(i3,3);
		mt.addImage(bg,4);

		mt.waitForAll();

		System.out.println("Got images");
		
		//int width = i.getWidth(this);
		//System.out.println("Widthinit: " + Integer.toString(width));
		//int height = i.getHeight(this);


		s1 = new AnimatedSprite(i1,i1.getWidth(this),1,i1.getWidth(this),i1.getHeight(this));
		s1.setTrans(trans);
		
		s2 = new AnimatedSprite(i2,i2.getWidth(this),1,i2.getWidth(this),i2.getHeight(this));
		s2.setTrans(trans);

		s3 = new AnimatedSprite(i3,i3.getWidth(this),1,i3.getWidth(this),i3.getHeight(this));
		s3.setTrans(trans);

		pf = new Playfield(bg,3);

		pf.addSprite(0,s1);
		pf.addSprite(1,s2);
		pf.addSprite(2,s3);
		//pf.addSprite(1,s2);

		s1.setPos(new Point(30,30));
		s2.setPos(new Point(200,60));
		s3.setPos(new Point(90,200));
		
		pf.Draw();
			pf.renderImage(this);

		}catch(Exception e){
			System.out.println(e);
		}
	}

	/*public boolean mouseUp(Event e, int x, int y){
		
		for(int i = 0;i<300;i = i +5){
			s1.setPos(i,i);

		pf.Draw();
		pf.renderImage(this);
		
		Graphics g = getGraphics();
		paint(g);
		//this.repaint();
		}
		

		/*pf.resetImage();
		pf.renderImage(this);
		
		Graphics g = getGraphics();
		paint(g);

		return false;

	}*/

	public boolean mouseDown(Event e, int x, int y){
		
		selectedSprite = (AnimatedSprite)pf.selectSprite(x,y);
		return false;

	}

	void repaintPlayfield(){
			pf.Draw();
			pf.renderImage(this);
			Graphics g = getGraphics();
			g.drawImage(pf.getRenderedImage(),0,0,this);
	}

	public boolean mouseDrag(Event e, int x, int y){

		//System.out.println("Here");
		//AnimatedSprite sp = (AnimatedSprite)pf.selectSprite(x,y);
		//if(sp != null){
		if(isTick()){
			selectedSprite.setPos(new Point(x-50,y-50));
			addState();
			repaintPlayfield();
		}
			
						

		//}
		return false;
	}

	boolean isTick(){
		if(tick == 10) {
			tick = 0;
			return true;
		}
		else{
			tick++;
			return false;
		}
	}


	/*public boolean mouseUp(Event e, int x, int y){
		if(s1.overlapsNonTransparentPixel(x,y)) System.out.println("Overlap NTP");
		return false;
	}*/



	public boolean handleEvent(Event e){
		//System.out.println(e);
		
		if(e.id == 503){
			if(pf != null && pf.overlapsNonTransparentPixel(e.x,e.y)){
				translab.setText("Opaque Pixel");
			}else translab.setText("Transparent Pixel");


			//mouse move event

		}

		
		if(e.target.equals(sbar)){
			int val = ((Integer)e.arg).intValue();
			//System.out.println(val);
			if(val != 0){
				pf.setAlpha(val);
				repaintPlayfield();
			}

		}
		if(e.arg != null){
		if(e.arg.equals("Playback")){
			playback();
		}
		}
		return super.handleEvent(e);

	}


	void playback(){
		System.out.println("playback()");
		Enumeration e = states.elements();

		while(e.hasMoreElements()){
			Vector v = (Vector)e.nextElement();
			Point s1p = (Point)v.elementAt(0);
			Point s2p = (Point)v.elementAt(1);
			Point s3p = (Point)v.elementAt(2);

			s1.setPos(s1p);
			s2.setPos(s2p);
			s3.setPos(s3p);
			//addState();
			repaintPlayfield();
		}
		states = new Vector();
	}

	public void paint(Graphics g){
		//System.out.println("Applet.paint()");
		if(pf != null){
			
			g.drawImage(pf.getRenderedImage(),0,0,this);
		}
	}

	public void update(Graphics g){
		//paint(g);
	}

	public void stop(){
	}


}

