import java.awt.*;
import primitives.frames.*;
import primitives.machines.*;
import primitives.geomtry.*;
import primitives.spaces.*;
public class FourArmsProof extends Frames implements FramesListener{
	int currentFrame=0;
	int sign = 1;
	int arm = 2;
	NarmsMachineProof machine;
//	NarmsMachine machine1;
	CircleSpace space;
	Coordinate center;
	public void start(){
			
		machine = new NarmsMachineProof(frames[0].drawArea.getSize(),4,1.3);
		frames[0].drawArea.setCurrentObject(machine);
		machine.setChangeRate(0.01);
		machine.testRun();
		changeFrame(currentFrame);
		
	}
	public void stop(){
	 super.stop();
	 machine = null;
	 space = null;
	 center = null;
	}
	public void changeFrame(int index){
		run = true;
		currentFrame = index;
		t =null;
		if (index==0)space = null;
		switch(index){
		case 1:{
			space = new CircleSpace(frames[0].drawArea.getSize(),0,Math.PI*2);
			space.setMachine(machine);
			machine.switchBend(2);break;
			}
		case 2:{
			space = new MultipleCircles(frames[1].drawArea.getSize(),0,machine.arms);
			((MultipleCircles)space).setMachine(machine);break;
			}
		}
		frames[1].drawArea.setCurrentObject(space);
		frames[1].drawArea.repaint();
		startThread();
	}
	public void changeFrames(){
		switch(currentFrame){
		case 0:runFrame0();break;
		case 1:runFrame1();break;
		case 2:runFrame2();break;
		
		}
	}
  	//machine with aditional arm
	private void runFrame0(){
		  int result=machine.rotateCenterEx(0,sign*0.01);
		  frames[0].drawArea.repaint();
		  if (result>0) sign=sign*(-1);
	}
	//machine with additional arm with circle as configuration space
	private void runFrame1(){
		int result=machine.rotateCenterEx(0,sign*0.01);
		if (result>-0){
			sign=sign*(-1);
			machine.rotateCenterEx(0,sign*0.01);
			machine.strechArm(result);
			machine.switchBend(result);
		}
		space.changeState();
		frames[0].drawArea.repaint();
		frames[1].drawArea.repaint();

	}
	// machine with multiple circles
	private void runFrame2(){
		  int result=machine.rotateCenterEx(0,sign*0.01);
			if ((result==1)||(result==machine.arms-1)){
				sign=sign*(-1);
				machine.rotateCenterEx(0,sign*0.01);
				machine.strechArm(result);
				machine.switchBend(result);
			if (result==1){
				machine.switchBend(arm++);
				if (arm==machine.arms-1) arm = 2;
			}
		}
		space.changeState();
		frames[0].drawArea.repaint();
		frames[1].drawArea.repaint();

	}
	
	/*private void runFrame3(){
		
	}
	
	private void runFrame5(){
	
	} */

	


}