//************************************************************************
//Program name:
//Problem Desrciption:
//
//Name:
//Date:
//class:
//************************************************************************

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.text.*;
//***********************************************************************
// class that handles mouse events
//
// keeping track of the mouse location and whether 
// or not a button is pressed
//***********************************************************************
class TheMouseHandler extends MouseAdapter implements MouseMotionListener
{
	ComputeFigure theCurrentApplet;

	public  TheMouseHandler(ComputeFigure x)
	{
		theCurrentApplet=x;
	}

	public void mouseEntered(MouseEvent e)
	{
		theCurrentApplet.x=0;
		theCurrentApplet.y=0;
		theCurrentApplet.width=0;
		theCurrentApplet.height=0;
		theCurrentApplet.repaint();	
		
	}
	
	public void mouseExited(MouseEvent e)
	{
		theCurrentApplet.x=0;
		theCurrentApplet.y=0;
		theCurrentApplet.width=0;
		theCurrentApplet.height=0;	
		theCurrentApplet.repaint();
	}

	public void mouseDragged(MouseEvent e)
	{
		theCurrentApplet.width=e.getX()-theCurrentApplet.x;
		theCurrentApplet.height=e.getY()-theCurrentApplet.y;
		
		theCurrentApplet.repaint();	
	}
	
	public void mouseMoved(MouseEvent e)
	{	
		//empty on purpose
	}

	public void mousePressed(MouseEvent e)
	{	
		theCurrentApplet.x=e.getX();
		theCurrentApplet.y=e.getY();	
	}
}

//******************************************************************
// class that handles which button has been pushed
//
//
//******************************************************************
class TheButtonHandler implements ActionListener
{
	
	ComputeFigure currentApplet;

	public void actionPerformed(ActionEvent e)
	{
		
		System.out.println(e.getActionCommand());
		currentApplet.figure=e.getActionCommand();
		
	}
	
	public TheButtonHandler(ComputeFigure x)
	{
		currentApplet=x;
	}

}

//*****************************************************************
public class ComputeFigure extends Applet
{
	//gui elements
	Button circleButton;
	Button rectangleButton;
	TheMouseHandler mouseManager;
	TheButtonHandler buttonManager;
	Panel holdbuttons;

	//instance variables
	int x,y,height,width;
	String figure;

	public void init()
	{
		//instantiate classes 
		mouseManager=new TheMouseHandler(this);
		buttonManager=new TheButtonHandler(this);
		holdbuttons=new Panel(); 
		circleButton=new Button("Circle");
		rectangleButton=new Button("Rectangle");
		
		//set initial default values
		figure="Circle";
		x=50;
		y=50;
		width=50;
		height=50;
		
 		addMouseMotionListener(mouseManager);
		addMouseListener(mouseManager);
		
		circleButton.addActionListener(buttonManager);
		circleButton.setBackground(Color.red);
		
		rectangleButton.addActionListener(buttonManager);
		rectangleButton.setBackground(Color.green);
		
		setLayout(new BorderLayout());
		holdbuttons.add(circleButton);
		holdbuttons.add(rectangleButton);
		add("North",holdbuttons);
		setBackground(Color.pink);
		
		
	}

	public void paint(Graphics g)
	{
	
		NumberFormat nf = NumberFormat.getInstance();
		nf.setMaximumFractionDigits(2);
		double area = 0;
		double perimeter = 0;
		double centerx = 0;
		double centery = 0;
		double diameter ;
		double top_left_y =x;
		double top_left_x =y;
	    	
		if(width > height)
		diameter = width;
	    	else
	    	diameter = height;
		
		double r = diameter/2;
		if(figure.equals("Circle") )
		{
			g.drawOval(x,y,(int)diameter,(int)diameter);

			
			//put computations here for circle
		      	area = Math.PI * Math.pow(r,2);
		      	perimeter = Math.PI * 2 * r ;
			centerx = x + (diameter/2);
      			centery = y + (diameter/2);      
			//end circle computations

		}
		else
		{
			g.drawRect(x,y,width,height);

			//put computations here for rectangle
			area = height * width;
			perimeter = 2*height + 2 * width ;
			centerx = x + width/2 ;
			centery = y + height/2 ;
			//end Rectangle computations
		}

		g.drawString("Area= " + nf.format(area), 120,320); 
       		g.drawString("Perimater="+ perimeter, 120,360);   
		g.drawString("Center(x,y) =("+ centerx + "," + centery + ")", 120, 340);
		g.drawString("Top Left Corner (x,y) = ("+ x+","+y+")",120,380);		

	}

}

