/**
Comp6461 Lab 2
@ author Rod Harris
*/

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class Lab2
{
	public static void main(String[] args)
	{
		Lab2Frame frame = new Lab2Frame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.show();
	}
}

class Lab2Frame extends JFrame
{
	public Lab2Frame()
	{
		setTitle("Lab 2");



		// Select one of the 3 types of Image

		//ShowImage showImage = new ShowImage("./cramps.gif");
		ShowImage showImage = new ShowImage(50);
		//ShowImage showImage = new ShowImage();




		Image image = showImage.getImage();

		if (image == null)
		{
			System.out.println("No image loaded or created");
			System.exit(-1);
		}


		// get the screen size for image scaling calculations

		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screensize = toolkit.getScreenSize();

		int screenXSize = (int) screensize.getWidth();
		int screenYSize = (int) screensize.getHeight();

		System.out.println("Screen Dimensions :  X = " + screenXSize + "  Y = " + screenYSize);

		int xsize = image.getWidth(null);
		int ysize = image.getHeight(null);

		System.out.println("Image Dimensions :  X = " + xsize+"  Y = " + ysize);


		// rescale the image if necessary

		boolean done = (xsize * 4 <= screenXSize) && (ysize * 4 <= screenYSize);

		while (!done)
		{
			if (xsize * 4 > screenXSize)
			{
				double newx = screenXSize / 4.0;
				double ratio = newx / xsize;
				double newy = ysize * ratio;
				image = image.getScaledInstance((int)newx,(int)newy,Image.SCALE_SMOOTH);
				xsize = image.getWidth(null);
				ysize = image.getHeight(null);
			}


			if (ysize * 4 > screenYSize)
			{
				double newy = screenYSize / 4.0;
				double ratio = newy / ysize;
				double newx = xsize * ratio;
				image = image.getScaledInstance((int)newx,(int)newy,Image.SCALE_SMOOTH);
				xsize = image.getWidth(null);
				ysize = image.getHeight(null);
			}


			System.out.println("Image Rescaled");
			System.out.println("Image Dimensions :  X = " + xsize + "  Y = " + ysize);
			done = (xsize * 4 <= screenXSize) && (ysize * 4 <= screenYSize);
		}


		// set the size of the frame

		int x1 = (screenXSize - (2 * xsize)) / 2;
		int y1 = (screenYSize - (2 * ysize)) / 2;

		setBounds(x1, y1, 2*xsize, 2*ysize);
		Lab2Panel panel = new Lab2Panel(image);

		getContentPane().add(panel);
	}
}

class Lab2Panel extends JPanel
{
	private int xsize;
	private int ysize;

	public Lab2Panel(Image img)
	{
		image = img;

		xsize = image.getWidth(null);
		ysize = image.getHeight(null);
	}

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);

		g.drawImage(image, xsize / 2 - 4, ysize / 2 - 14, null);
	}

	Image image;
}
